我正在尝试实现通知,可以使用firebase控制台向应用程序的所有设备发送通知,但我在尝试检索设备的令牌以便将通知发送到一个特定设备时遇到问题。我有一个扩展FirebaseMessagingService
的服务,它包括下面所示的方法onNewtoken
。我已将此服务添加到我的清单中,并尝试运行该应用程序,但仍然找不到令牌。我做错什么了吗?
@Override
public void onNewToken(@NonNull String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}
OnNewtoken
将仅通过以下场景触发
- 应用程序删除实例ID
- 应用程序已在新设备上还原
- 用户卸载/重新安装应用程序用户清除应用程序数据
您可以通过以下代码以及获得用户令牌
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String token = instanceIdResult.getToken();
// send it to server
}
});
您可以像这样强制获取令牌u可以从onCreate()
调用此代码,因为有时当应用程序已经生成令牌时,它不会调用onNewToken
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
KLog.w("getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
if (task.getResult() != null) {
String token = task.getResult().getToken();
}
}
});