【发布时间】:2016-12-31 14:41:09
【问题描述】:
我想知道是否有解决方案可以在 FCM 令牌为空时获取它?换句话说,我想在Android应用程序中手动调用FCM来获取令牌?
【问题讨论】:
标签: android firebase push-notification token firebase-cloud-messaging
我想知道是否有解决方案可以在 FCM 令牌为空时获取它?换句话说,我想在Android应用程序中手动调用FCM来获取令牌?
【问题讨论】:
标签: android firebase push-notification token firebase-cloud-messaging
如果您想更快地获得令牌,您必须使用:
token = FirebaseInstanceId.getInstance().getToken("projectNumber","FCM");
代替:
token = FirebaseInstanceId.getInstance().getToken();
【讨论】:
使用getInstanceId() 代替getToken(),已弃用。
new Thread(new Runnable() {
@Override
public void run() {
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String deviceToken = instanceIdResult.getToken();
}
});
}
}).start();
【讨论】:
如果调用FirebaseInstanceID.getToken()时得到null,则表示该令牌尚未生成。 现在没有 API 可以强制生成令牌,因此您必须改为监控令牌生成。
要监控令牌生成,请创建一个派生自 com.google.firebase.iid.FirebaseInstanceId 的类并覆盖其 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);
}
请注意,获取和监控令牌都包含在 accessing the registration token 上的 Firebase 文档中,这是我从中获得上述代码示例的地方。
【讨论】: