如何从 Google Cloud Function (CF)(而非 Firebase Cloud Function)使用 FCM?主要问题似乎是身份验证/权限。谷歌的文档再次迷惑了我。
我们的 GAE 应用程序之一正在使用 FCM。然而,Firebase FCM 从 CF 的初始化似乎有所不同。我们的 GAE 应用程序像这样初始化 Firebase(初始化时)。
FileInputStream serviceAccount = new FileInputStream( "WEB-INF/mywebappfirebasekey.json" );
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials( GoogleCredentials.fromStream( serviceAccount ) )
.setDatabaseUrl( "https://my-firebase-project.firebaseio.com" )
.build();
我不确定如何像使用 GAE 应用程序一样读取 CF 中的 Firebase JSON 文件,或者即使这种初始化方式可以在 CF 中工作。
相反,我在 Firebase 项目中调整了 IAM(通过云控制台),以使用服务帐户提供对 CF 的访问。委托人是CF项目的服务账户。
我也做了相反的事情。使用云控制台,我已将 Firebase 角色添加到我们的 CF 服务帐户。
所有这些都没有什么区别。尝试通过 Firebase 发送消息时,CF 日志显示此错误。
错误:资源“//cloudresourcemanager.googleapis.com/projects/firebase-project-id”的权限“cloudmessaging.messages.create”被拒绝(或者它可能不存在)。
Firebase Cloud Messaging Admin 没有
cloudmessaging.messages.create
的权限。要添加此权限,请使用以下角色之一:
Firebase 管理员(角色/firebase.admin)
Firebase 增长管理员 (roles/firebase.growthAdmin)
Firebase Admin SDK 管理员服务代理 (roles/firebase.sdkAdminServiceAgent)
Firebase SDK 配置服务代理 (roles/firebase.sdkProvisioningServiceAgent)
您可以参考这个文档:了解角色