【发布时间】:2021-09-17 14:12:25
【问题描述】:
我尝试到处搜索解决方案,例如下面的几个链接,但找不到任何正确答案。
What is FCM token in Firebase?
Firebase FCM force onTokenRefresh() to be called
问题是每次我尝试从 Android Studio 和 Play 商店进行全新安装时,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 和 build gradle 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,但遇到了同样的情况。
【问题讨论】:
-
以
ey开头的似乎是 JWT,而不是 FCM 令牌。我认为FirebaseInstallations.getInstance().getToken(true)不会返回 JWT,所以您确定这些值不是来自其他地方吗? -
是的,我确定。因为共享首选项文件是在 FirebaseMessagingService 中的
onNewToken()方法中写入的。此外,我根本没有使用 JWT。现在才听说。 -
我们遇到了同样的问题,您找到解决方案了吗?
标签: android firebase-cloud-messaging