【发布时间】:2020-02-04 03:36:24
【问题描述】:
我有一个旧项目,其后端完全由 Firebase 处理(我没有专用服务器)。我曾经使用邮递员通过 FCM 将主题消息发送到端点 fcm.googleapis.com/fcm/send,标题为 Authorization : key=<myKey>
现在它给了我403 错误,当我检查 firebase documentation 时,我知道使用 FCM 旧版 HTTP API 的应用程序应该考虑迁移到 HTTP v1 API
我浏览了文档,它说授权密钥现在看起来像
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
我被困在如何为我的项目创建此授权密钥,以便我可以使用它通过邮递员或 curl 请求触发消息
我在我的 android 项目中执行了以下代码
private void getAccessToken() {
String[] SCOPES = {"https://www.googleapis.com/auth/firebase.messaging"};
GoogleCredential googleCredential = null;
googleCredential = GoogleCredential
.fromStream(streamFromAsset("service-account.json"))
.createScoped(Arrays.asList(SCOPES));
googleCredential.refreshToken();
return googleCredential.getAccessToken();
}
这段代码给了我一个类似于ya29.ElqKBGN2Ri_Uz...HnS_uNreA的访问令牌
现在我可以使用这个令牌从邮递员那里发送消息了。
但我仍然感到困惑,无论我为获得令牌所做的一切都是正确的做法。文档说
将您的 Firebase 凭据与您的首选语言的 Google API 客户端库一起使用,以检索短期 OAuth 2.0 访问令牌:
令牌是短暂的。如果我有一个服务器,那么只要令牌过期,服务器代码就会自动获取新令牌。由于我没有服务器,每次都需要手动生成token吗?对于如何记录令牌有效?在我的情况下,正确的做法是什么?
提前致谢!
【问题讨论】:
-
你在控制台上enable it了吗?
-
是的,一切正常。当您没有后端服务器时,唯一的疑问是关于令牌生成
-
哦。我现在明白了。很抱歉之前的问题。
-
@doe 我每次都会得到 java.io.FileNotFoundException: service-account.json 我使用的代码与您使用的代码相同
-
可以分享streamFromAsset("service-account.json") 方法代码
标签: android firebase oauth-2.0 firebase-cloud-messaging google-oauth