我正在使用Firebase FCM在设备之间发送消息。但是,我一直在获取令牌ID。我已经尝试使用“ FirebaseInstanceId.getInstance()。getToken();”但无法获得令牌ID。它不断向我返回空值。
我发现一些帖子说不赞成使用getToken(),而必须改用getInstanceId()。但是,我的Android Studio无法解析此getInstanceId()和onNewToken()。有什么方法可以获取Firebase TokenID?
答案 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);
}
});
}