Firebase实例ID:在21.0.0中弃用getId

问题描述

随着FirebaseInstanceId和FirebaseCloudMessaging(21.0.0)的最新发行版,Firebase已弃用iid程序包,并且现已弃用getToken()getId()方法

根据Firebase release note方法getToken()已移至FirebaseMessaging

之前:

FirebaseInstanceId.getInstance().getToken()

之后:

FirebaseMessaging.getInstance().getToken()

哪个使用fcmToken,但是要检索实例ID ,FirebaseMessaging或FirebaseInstanceId中都没有可用的方法


所以instance_id是否被认为是无用的ID,应该不再使用?还是有替代品吗?

解决方法

不推荐使用FirebaseInstanceId类,要使用FirebaseMessagingClass获得令牌。可以使用以下代码生成令牌:

FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
      if (!task.isSuccessful()) {
        Log.w(TAG,"Fetching FCM registration token failed",task.getException());
        return;
      }

      // Get new FCM registration token
      String token = task.getResult();

      // 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();
    }
});

关于Firebase InstanceId,这是官方文件说的:

公共任务getInstanceId()-> 不建议使用此方法。 对于实例标识符,请改用FirebaseInstallations.getId()。对于FCM注册令牌,请改用FirebaseMessaging.getToken()。

,

检查FirebaseInstanceId#getId()的代码,我发现建议您改用FirebaseInstallations#getId

不推荐使用此方法

改为使用FirebaseInstallations.getId()

val instanceId = FirebaseInstallation.getInstance().getId()
,

试试这个

 public String getToken() {
String token;
        FirebaseMessaging.getInstance().getToken()
                .addOnCompleteListener(new OnCompleteListener<String>() {
                    @Override
                    public void onComplete(@NonNull Task<String> task) {
                        if (task.isSuccessful()) {

                           token = task.getResult();
                            

                        }
                    }
                });
        
        return token;
    }