每次新的时候都会生成 Firebase 令牌
Firebase token is generated every time new
我们在我们的应用程序中使用 Firebase 云消息传递来显示推送通知。根据 FirebaseInstanceId 文档,实例 ID 是稳定的,除非:
- 应用程序删除实例 ID
- 应用已在新设备上恢复
- 用户uninstalls/reinstall应用程序
- 用户清除应用数据
然而,每次我们启动应用程序(之前停止,未恢复)时,都会通过 FirebaseInstanceIdService onTokenRefreshed()[=44= 返回不同的令牌]回调。
我想知道这是服务的正常行为还是代码中存在错误。
更新
root build gradle 文件中的依赖项:
classpath 'com.google.gms:google-services:3.0.0'
app build gradle 文件中的依赖项:
"com.google.firebase:firebase-messaging:9.2.1"
"com.google.android.gms:play-services-base:9.2.1"
// defined at the bottom of the same file: plugin for firebase
apply plugin: 'com.google.gms.google-services'
FirebaseInstanceIdService:
@Override
public void onTokenRefresh() {
// Get the saved token from the shared preferences
final String oldToken = PrefsHelper.getStringValue(PREF_DEVICE_TOKEN);
Log.d(TAG, "Old token: " + oldToken);
// Get updated InstanceID token.
final String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
if (TextUtils.isEmpty(oldToken)) {
handleNewToken(refreshedToken);
} else {
handleTokenUpdate(oldToken, refreshedToken);
}
}
我们也在项目中使用Firebase Cloud Messaging。
我们在 android 应用中使用 firebase:
compile 'com.google.firebase:firebase-core:9.0.2'
每当我们重新启动应用程序时,我们收到的令牌都会保留。
最好确保每次启动应用程序时,令牌都会在 FirebaseInstanceService 中刷新:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override public void onTokenRefresh() {
...
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// check here.
Log.d(TAG, "Refreshed token: " + refreshedToken);
...
}
}
然后确保在您的服务器中正确设置了 Firebase Server。
如果您每次启动应用程序时都获得不同的令牌,则可能是一个错误。但请确保您已经使用 newest Firebase Library.
测试了您的 android 项目
这个问题可能与您的问题有关:
Firebase Android Authentication failed: expired_token (Auth token is expired)
我们在我们的应用程序中使用 Firebase 云消息传递来显示推送通知。根据 FirebaseInstanceId 文档,实例 ID 是稳定的,除非:
- 应用程序删除实例 ID
- 应用已在新设备上恢复
- 用户uninstalls/reinstall应用程序
- 用户清除应用数据
然而,每次我们启动应用程序(之前停止,未恢复)时,都会通过 FirebaseInstanceIdService onTokenRefreshed()[=44= 返回不同的令牌]回调。
我想知道这是服务的正常行为还是代码中存在错误。
更新
root build gradle 文件中的依赖项:
classpath 'com.google.gms:google-services:3.0.0'
app build gradle 文件中的依赖项:
"com.google.firebase:firebase-messaging:9.2.1"
"com.google.android.gms:play-services-base:9.2.1"
// defined at the bottom of the same file: plugin for firebase
apply plugin: 'com.google.gms.google-services'
FirebaseInstanceIdService:
@Override
public void onTokenRefresh() {
// Get the saved token from the shared preferences
final String oldToken = PrefsHelper.getStringValue(PREF_DEVICE_TOKEN);
Log.d(TAG, "Old token: " + oldToken);
// Get updated InstanceID token.
final String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
if (TextUtils.isEmpty(oldToken)) {
handleNewToken(refreshedToken);
} else {
handleTokenUpdate(oldToken, refreshedToken);
}
}
我们也在项目中使用Firebase Cloud Messaging。
我们在 android 应用中使用 firebase:
compile 'com.google.firebase:firebase-core:9.0.2'
每当我们重新启动应用程序时,我们收到的令牌都会保留。
最好确保每次启动应用程序时,令牌都会在 FirebaseInstanceService 中刷新:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override public void onTokenRefresh() {
...
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// check here.
Log.d(TAG, "Refreshed token: " + refreshedToken);
...
}
}
然后确保在您的服务器中正确设置了 Firebase Server。
如果您每次启动应用程序时都获得不同的令牌,则可能是一个错误。但请确保您已经使用 newest Firebase Library.
测试了您的 android 项目这个问题可能与您的问题有关:
Firebase Android Authentication failed: expired_token (Auth token is expired)