android - 如何在 FirebaseInstanceIdService 之外访问 Firebase token ?

标签 android firebase google-cloud-messaging firebase-cloud-messaging

我正在从 GCM 升级到 FCM。在 onTokenRefresh 之外获取 Firebase 设备 token 的正确方法是什么?

我正在尝试获取设备 token ,以便稍后可以在我的服务器上重新启用它。我最初按照显示的文档获取设备 token here对于方法 1。但是,当我尝试通过方法 2 直接访问设备 token 时,我得到了一个不同的 token 。我是否在方法 2 中错误地检索了设备 token ?

方法一:FirebaseInstanceIdService.onTokenRefresh() 内部

String refreshedToken = FirebaseInstanceId.getInstance().getToken();

方法二:直接获取设备 token

FirebaseInstanceId instanceID = FirebaseInstanceId.getInstance();
String registrationToken = instanceID.getToken(this.projectNumber, "FCM");

最佳答案

只是为了解释方法 1 中发生了什么。建议获取onTokenRefresh()里面的token因为当此方法被触发时,这意味着 previous token 已失效。来自文档:

Called when the system determines that the tokens need to be refreshed. The application should call getToken() and send the tokens to all application servers.

对于方法 #2,您正在调用 getToken(String authorizedEntity, String scope) , 而不是 getToken() . setting up your app to receive messages from multiple senders时常用带两个参数的那个.

每次使用不同的项目 ID (authorizedEntity) 调用 getToken(String authorizedEntity, String scope) 时,都会返回不同的 token 。

只需用方法 1 中的相同调用替换您的方法 2,如下所示:

String registrationToken = FirebaseInstanceId.getInstance().getToken();

您应该能够检索到指定的 token 。 token 通常在初始 Activity 的 onCreate() 中检索。

关于android - 如何在 FirebaseInstanceIdService 之外访问 Firebase token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42684383/

相关文章:

javascript - 从 HTML 中的按钮获取引用以在 JavaScript 的函数中使用

android - 将数据从服务器发送到 Android 应用程序的最佳实践

android - 谷歌云消息沙盒

使用 Bixolon R200 进行打印的 Android 应用程序

android - 如何在Android依赖项中添加一行?

javascript - 通过 firebase 函数替换在发送网格中不起作用

firebase - Firebase for Flutter 中此身份验证背后的逻辑是什么?

java - GCM 多行通知

android - 调整 float 操作按钮的图标大小(fab)

android - 使用 PolIdeaTestRunner 的空测试套件