【问题标题】:How to get Oauth access token for FCM v1? No server如何获取 FCM v1 的 Oauth 访问令牌?没有服务器
【发布时间】: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


【解决方案1】:

...每次都需要手动生成token吗?

是的,因为令牌过期了。

如何记录令牌的有效性?

根据我的经验,(默认)时间可能从 30 分钟到 1 小时不等。尽管如此,我建议不要在上面放置一个精确的计时器。另见OAuth2 and Google API: Access token expiration time?

在我的情况下,正确的做法是什么?

嗯。正确的方法是设置专门用于此任务的服务器。但是,如果您是手动进行,那么您在帖子中所做的就是(我认为)可行的最简单方法。

【讨论】:

  • 您有什么方法可以自动化这个过程吗?每次需要发送 FCM 消息时运行 Android 代码来获取令牌似乎不是一个可行的解决方案。有没有办法通过脚本或类似的东西来完成它?
  • @doe 也许是一个 python 脚本(文档中有一个用于获取 oauth 令牌的 python 示例代码)。话虽如此,我对 python 脚本编写经验并不丰富,也没有使用 FCM 开发无服务器解决方案来提供进一步的建议。干杯!
猜你喜欢
  • 1970-01-01
  • 2012-06-15
  • 2015-10-12
  • 1970-01-01
  • 2018-02-17
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多