FCM间歇性生成错误的令牌



我试着到处搜索解决方案,比如下面的几个链接,但找不到任何正确的答案。

FCM令牌未生成

什么是Firebase中的FCM代币?

Firebase FCM强制onTokenRefresh((调用

问题是,每次我尝试从Android Studio和Play Store进行新安装时,FCM有时会生成正确的令牌,但有时会生成错误的令牌。虽然正确的令牌总是不同的,但错误的令牌总是相同的,从eyJhb开始。我知道这些信息是无用的,因为FCM根据设备ID和应用程序ID生成令牌。

我已经强制FCM在我的LoginActivity.java:中使用此代码生成令牌

mPrefToken = getSharedPreferences(PREF_TOKEN, Context.MODE_PRIVATE);
fcmtoken = mPrefToken.getString(KEY_TOKEN, "");
if (fcmtoken.equals("")) {
FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
@Override
public void onComplete(@NonNull Task<InstallationTokenResult> task) {
if(!task.isSuccessful()){
return;
}
fcmtoken = task.getResult().getToken();
mPrefToken.edit().putString(KEY_TOKEN, fcmtoken).apply();
sendToken(user_id,fcmtoken);
}
});
} else {
sendToken(user_id,fcmtoken);
}

并且在MyFirebaseMessagingService.java

@Override
public void onNewToken(String token) {
super.onNewToken(token);
mPrefToken = getSharedPreferences(PREF_TOKEN, Context.MODE_PRIVATE);
mPrefToken.edit().putString(KEY_TOKEN, token).apply();
}

我使用的是最新的Android Studio(4.2.2和构建等级com.android.tools.build:gradle:4.2.2(,但据我记忆所及,从4.1.x开始我就一直遇到这个问题。我的应用程序针对的是SDK 23-30。

我正在使用buildToolsVersion "30.0.3",但我相信我从30.0.2 开始就一直在经历这种情况

FCM版本为com.google.firebase:firebase-messaging:22.0.0。尝试过21.0.0,但经历过同样的事情。

我遇到了同样的问题。目前,在我的案例中,使用FirebaseMessaging的这种替代解决方案提供了正确的FCM令牌。

FirebaseMessaging.getInstance().getToken().addOnCompleteListener((r) -> {
if(r.isSuccessful()){
String fcmToken = r.getResult();
}
});

不通过.getToken(true)刷新,而是通过.getToken(false)刷新。

最新更新