Google Cloud Engine上的Firebase:如何设置服务帐户?

n53p2ov0  于 2023-06-30  发布在  Go
关注(0)|答案(1)|浏览(175)

我在Google Cloud Engine示例上使用Firestore客户端(带Go)已经6年了,Google Cloud Engine默认服务账号,感谢这两个设置:

  • 我在GCP控制台的Firebase IAM页面上,给该服务账号指定了Firebase项目的Editor角色
  • 我在运行的GCE示例上开启了Cloud Datastore作用域

我现在正在尝试设置Firebase Cloud Messaging客户端(仍在Go上):

ctx := context.Background()
app, err := firebase.NewApp(ctx, nil)
if err != nil {
    log.Fatalf("error initializing app: %v\n", err)
}
client, err := app.Messaging(ctx)
if err != nil {
    log.Fatalf("error getting Messaging client: %v\n", err)
}
...
response, err := client.Send(ctx, message)
if err != nil {
    log.Fatalln(err)
}

但我得到了这个错误:Request had insufficient authentication scopes.
我在GCE示例上查找云消息作用域(类似于云数据库),但是找不到:

然后,我读到here作用域现在是遗留的
那么,现在向Google Cloud Engine示例提供Firebase项目访问(包括Cloud Messaging)的正确方法是什么?

0mkxixxg

0mkxixxg1#

好的,所以在Firebase项目上,GCE服务帐户Editor角色仍然可以使用“遗留”作用域。
如果您有两个独立的GCP项目,一个用于Firebase,一个用于您的GCE,请确保两个GCP项目都启用了Firebase云消息APIhttps://console.cloud.google.com/apis/api/fcm.googleapis.com/overview?project=xxxxxxxx(其中xxxxx是GCP项目ID)
您还应该在配置中指定Firebase项目ID,否则会出现“SenderId mismatch”错误,因为默认情况下它使用GCE项目ID。

ctx := context.Background()
config := &firebase.Config{ProjectID: "xxxxxxxx"}
app, err := firebase.NewApp(ctx, config)
if err != nil {
    log.Fatalf("error initializing app: %v\n", err)
}

相关问题