每次新建时都会生成Firebase令牌

Luc*_*aka 6 android firebase firebase-cloud-messaging

我们在应用中使用Firebase云消息传递来显示推送通知.根据FirebaseInstanceId doc,Instance ID是稳定的,除非:

  • 应用程序删除实例ID
  • 应用程序在新设备上恢复
  • 用户卸载/重新安装应用程序
  • 用户清除应用数据

但是我们每次启动应用时(先前停止,没有恢复),不同的令牌通过返回FirebaseInstanceIdService onTokenRefreshed()回调.

我想知道这是否是服务的正常行为或代码中是否存在错误.


更新

根构建gradle文件中的依赖关系:

classpath 'com.google.gms:google-services:3.0.0'
Run Code Online (Sandbox Code Playgroud)

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'
Run Code Online (Sandbox Code Playgroud)

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

ישו*_*ותך 5

我们也在项目中使用Firebase云消息传递.

我们在Android应用中使用firebase:

compile 'com.google.firebase:firebase-core:9.0.2'
Run Code Online (Sandbox Code Playgroud)

每当我们重新启动应用程序时,我们收到的令牌仍然存在.

最好确保每次启动应用时,令牌都会在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);

    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

然后确保在服务器中正确设置了Firebase服务器.

如果您每次启动应用程序时获得不同的令牌,这可能是一个错误.但请确保您已使用最新的Firebase库测试了您的Android项目.

此问题可能与您的问题有关:
Firebase Android身份验证失败:expired_token(身份验证令牌已过期)