Firebase 实例 ID:在 21.0.0 中弃用 getId()
Posted
技术标签:
【中文标题】Firebase 实例 ID:在 21.0.0 中弃用 getId()【英文标题】:Firebase instance id: deprecation of getId() in 21.0.0 【发布时间】:2020-10-28 13:09:33 【问题描述】:随着最近发布的 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,不应再使用?或者有替代品吗?
【问题讨论】:
【参考方案1】: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()。
【讨论】:
【参考方案2】:Fcm 令牌
弃用前
val fcmToken = FirebaseInstanceId.getInstance().getToken()
替换
val fcmToken = FirebaseMessaging.getInstance().getToken()
FirebaseInstanceId#getId
弃用前
val istanceId = FirebaseInstanceId.getInstance().getId()
替换
查看FirebaseInstanceId#getId()
的代码,我看到了建议你应该改用FirebaseInstallations#getId
。
此方法已弃用
请改用
FirebaseInstallations.getId()
。
val instanceId = FirebaseInstallation.getInstance().getId()
【讨论】:
请注意,这可能不会返回相同的内容。 FirebaseInstallation instanceId 不是用于 FCM 的那个 FirebaseMessaging.getInstance().getToken() 给了我与已弃用的 FirebaseInstanceId.getInstance().getToken() 相同的结果 那是fcmToken
。问题是关于 instanceId 而不是令牌。 InstanceId可以使用FirebaseInstanceId#getId()
方法来实现。【参考方案3】:
FCM 令牌:
使用firebase_messaging包
String? token = await FirebaseMessaging.instance.getToken();
安装 ID:
使用flutterfire_installations包
String id = await FirebaseInstallations.instance.getId();
安装授权令牌:
String token = await FirebaseInstallations.instance.getToken();
【讨论】:
【参考方案4】:试试这个
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;
【讨论】:
这将返回 FCM 令牌,即result.token
的 iid.getToken()
。根据接受的答案,有一个FirebaseInstanceId.id
现在由FIS.getId()
实现以上是关于Firebase 实例 ID:在 21.0.0 中弃用 getId()的主要内容,如果未能解决你的问题,请参考以下文章
什么情况下应用会删除 Firebase Instance ID?
从 Firebase iOS SDK 获取 user_pseudo_id