我没有生成令牌..
onTokenrefresh()没有调用。任何人都可以帮忙。
它还连接到firebase,但令牌仍未生成。
public class MyFireBaseInstanceId extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
//Getting registration token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
//Displaying token on logcat
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
//You can implement this method to store the token on your server
//Not required for current project
SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
}
}
答案 0 :(得分:1)
代码是:
tokengenerate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (token!=null) {
Toast.makeText(MainActivity.this,token,Toast.LENGTH_LONG).show();
RegisterToken registerToken = new RegisterToken();
registerToken.execute();
}
else
myFireBaseInstanceId.onTokenRefresh();
}
});
}
答案 1 :(得分:1)
从任何活动中尝试此:
FirebaseMessaging.getInstance().subscribeToTopic("news");
String notificationToken = FirebaseInstanceId.getInstance().getToken();
如果仍未获得令牌,则项目中的google-services.json文件将出现错误
答案 2 :(得分:0)
1)请检查您在项目中添加了正确的google-services.json文件。 2)检查您在清单文件中添加了FCM服务。
答案 3 :(得分:0)
onTokenRefresh :
因此,当您第一次启动应用程序时,它可能会调用此方法,但不会在第二次启动时调用。
由于您使用SharedPreference,因此您可以使用它来检索活动中的令牌。
答案 4 :(得分:0)
当您获得FCM实例并首先在应用中刷新令牌时,FCM会生成令牌。 当您再次需要时您必须在设备中重新安装应用程序。
/NP
答案 5 :(得分:0)
您是否确定在您的AndroidManifest.xml中正确定义了FirebaseInstanceIdService
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service android:name=".FirebaseIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
答案 6 :(得分:0)
确保将实例ID的属性添加到活动选项卡下的Android清单文件中。在androidmanifest中错误添加属性可能会导致此错误。
答案 7 :(得分:0)
在初次启动应用程序时,FCM SDK会为客户端应用程序实例生成注册令牌。如果要定位单个设备或创建设备组,则需要通过扩展FirebaseMessagingService并覆盖onNewToken来访问此令牌。
当您需要检索当前令牌调用时
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
// Log and toast
String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});