如何在FirebaseInstanceIdService之外访问Firebase令牌?

Dav*_*ong 5 android firebase google-cloud-messaging firebase-cloud-messaging

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

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

方法1:在FirebaseInstanceIdService.onTokenRefresh()中

String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Run Code Online (Sandbox Code Playgroud)

方法2:直接访问设备令牌

FirebaseInstanceId instanceID = FirebaseInstanceId.getInstance();
String registrationToken = instanceID.getToken(this.projectNumber, "FCM");
Run Code Online (Sandbox Code Playgroud)

AL.*_*AL. 6

只是为了解释方法1中发生的情况。建议将令牌放入内部,onTokenRefresh()因为触发此方法时,这意味着先前的令牌已失效。从文档:

在系统确定需要刷新令牌时调用。应用程序应调用getToken()并将令牌发送到所有应用程序服务器。

对于方法2,您正在调用getToken(String authorizedEntity, String scope),而不是getToken()设置您的应用程序以接收来自多个发件人的消息时,通常使用带有两个参数的参数。

对于getToken(String authorizedEntity, String scope)具有不同项目ID(authorizedEntity)的每次调用,它将返回不同的令牌。

只需更换您的方法2,在同一呼叫方法1,如下所示:

String registrationToken = FirebaseInstanceId.getInstance().getToken();
Run Code Online (Sandbox Code Playgroud)

并且您应该能够检索指定的令牌。令牌通常是在onCreate()您的初始活动中获取的。