根据Android 8.0行为更改,
对于安装在运行Android 8.0的设备上的应用程序,ANDROID_ID的值现在是每个应用程序签名密钥以及每个用户的范围.对于app-signing密钥,用户和设备的每个组合,ANDROID_ID的值是唯一的.因此,在同一设备上运行的具有不同签名密钥的应用程序不再看到相同的Android ID(即使对于同一用户).
为了测试上面的变化,我做了两个测试APK并发现了以下行为(在Nexus 5X,OS 8.0.0上测试过):
以下是我的查询:
我的应用程序正在接收来自 2 个 firebase 项目的推送通知。我通过分别调用“getToken(StringauthorizedEntity, Stringscope)”来获取每个发件人 ID 的令牌。
String token1 = FirebaseInstanceId.getInstance().getToken("authorizedEntity1", "FCM");
String token2 = FirebaseInstanceId.getInstance().getToken("authorizedEntity2", "FCM");
Run Code Online (Sandbox Code Playgroud)
根据onTokenRefresh文档
当系统确定需要刷新令牌时调用。应用程序应该调用 getToken() 并将令牌发送到所有应用程序服务器。这不会被频繁调用,它是密钥轮换和处理实例 ID 更改所必需的,因为:
应用程序删除实例ID
应用程序已在新设备上恢复
用户卸载/重新安装应用程序
用户清除应用数据
由于onTokenRefresh已被弃用,我已经检查了onNewToken,根据文档
在生成默认 Firebase 项目的新令牌时调用。在应用程序安装后首次生成令牌时会调用此函数,如果令牌发生更改,则会再次调用此函数。
Q1. 如果有多个发件人 ID,如何知道哪个是默认的 Firebase 项目?
Q2。假设如果“authorizedEntity1”与默认的 firebase 项目关联,那么是否意味着仅当 token1 发生更改时才会调用 onNewToken ?或者当 token2 改变时它也会被调用?如果它对 token2 不起作用那么如何知道token2需要刷新?
Q3。参考此,我的理解是,只要需要刷新任何令牌(不仅对于默认项目),就会调用 onTokenRefresh 。这种理解正确吗?
每当系统确定token1或token2需要刷新时,我想将更新的令牌发送到服务器。
注意:当我处理多个发件人 ID 时,我正在应用程序类中初始化 firebase。
从GCM迁移到FCM.
在GCM中,我们可以为多个发送者ID调用getToken()方法,如下所示:
String senderIds = "112233445566,889922338899";
String token = instanceID.getToken(senderIds,
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Run Code Online (Sandbox Code Playgroud)
Q1 - 进入FCM后,是否保持相同或者我需要进行任何更改才能获得多个发送者ID的令牌?
从这个引用中,我知道我可以为每个发送者ID调用getToken("senderIds1","FCM"),但我希望在进入FCM时进行最少的代码更改.
Q2将不适用于FCM(与GCM相同)或我必须调用 getToken("senderIds1","FCM"); getToken("senderIds2","FCM")?
getToken("senderIds1, senderIds2", "FCM")
Run Code Online (Sandbox Code Playgroud) android push-notification firebase google-cloud-messaging firebase-cloud-messaging