Firebase令牌ID返回空值

时间:2018-12-02 03:47:44

标签: android firebase firebase-cloud-messaging

我正在使用Firebase FCM在设备之间发送消息。但是,我一直在获取令牌ID。我已经尝试使用“ FirebaseInstanceId.getInstance()。getToken();”但无法获得令牌ID。它不断向我返回空值。

我发现一些帖子说不赞成使用getToken(),而必须改用getInstanceId()。但是,我的Android Studio无法解析此getInstanceId()和onNewToken()。有什么方法可以获取Firebase TokenID?

2 个答案:

答案 0 :(得分:1)

访问设备注册令牌:

在您的应用程序首次启动时,FCM SDK会为客户端应用程序实例生成注册令牌。如果要定位单个设备或创建设备组,则需要访问此令牌。

您可以通过创建扩展FirebaseInstanceIdService的新类来访问令牌的值。在该类中,调用getToken中的onTokenRefresh并记录值,如下所示:

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // Instance ID token to your app server.
    sendRegistrationToServer(refreshedToken);
}

还将服务添加到清单文件中:

<service
    android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

无论何时生成新令牌,都会触发onTokenRefresh回调,因此在其上下文中调用getToken可确保您正在访问当前可用的注册令牌。如果尚未生成令牌,则FirebaseInstanceID.getToken()返回null。

获取令牌后,可以将其发送到您的应用服务器。有关API的详细信息,请参见Instance ID API reference

(来自Firebase参考)

答案 1 :(得分:0)

FirebaseMessagingService 类中,添加以下代码。

@Override
public void onNewToken(String s) {
super.onNewToken(s);
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
  @Override
  public void onSuccess(InstanceIdResult instanceIdResult) {
   String BMrefreshedToken = instanceIdResult.getToken();
   Log.e("newToken",BMrefreshedToken);

   }
    });
}