Android 如果有多个发送者id,如何确定是否需要刷新令牌?

Android 如果有多个发送者id,如何确定是否需要刷新令牌?,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,我的应用程序正在接收来自2 firebase项目的推送通知。我通过分别调用“getToken(stringauthorizedentity,stringscope)”来获取每个发送者id的令牌 String token1 = FirebaseInstanceId.getInstance().getToken("authorizedEntity1", "FCM"); String token2 = FirebaseInstanceId.getInstance().getToken("authori

我的应用程序正在接收来自2 firebase项目的推送通知。我通过分别调用“getToken(stringauthorizedentity,stringscope)”来获取每个发送者id的令牌

String token1 = FirebaseInstanceId.getInstance().getToken("authorizedEntity1", "FCM");
String token2 = FirebaseInstanceId.getInstance().getToken("authorizedEntity2", "FCM");
根据onTokenRefresh文档

当系统确定令牌需要刷新时调用。应用程序应调用getToken()并将令牌发送到所有应用程序服务器。这不会被频繁调用,它是键旋转和处理实例ID更改所必需的,因为:

应用程序删除实例ID

应用程序已在新设备上还原

用户卸载/重新安装应用程序

用户清除应用程序数据

由于onTokenRefresh已被弃用,我已根据文档检查了OnEndToken

为默认Firebase项目生成新令牌时调用。 当第一次生成令牌时,在应用程序安装后调用,如果令牌发生更改,则再次调用

Q1.如果有多个发送者id,如何知道哪个是默认的Firebase项目

Q2.假设“authorizedEntity1”与默认firebase项目相关联,那么这是否意味着只有当token1更改时才会调用onNewToken?或者当token2被更改时也会调用它?如果它不适用于令牌2,那么如何知道token2需要刷新

Q3.据我所知,每当需要刷新任何令牌时(不仅仅是默认项目),都会调用onTokenRefresh。这种理解正确吗

每当系统确定需要刷新token1token2时,我希望将更新的令牌发送到服务器


注意:我正在应用程序类中初始化firebase,因为我正在处理多个发送者ID。

经过一些测试,我发现只有默认项目的令牌将被交付给onNewToken。当通过调用getToken为其他发件人ID创建新令牌时,将不会调用OnEndToken

通过调用getTokenAPI检索的令牌由不同于默认令牌的字符串数据组成

当默认令牌更改时,这些其他发送方id的令牌不会刷新。 看起来它们会一直持续到您显式调用DeleteTokenAPI为止。
(当我反复调用getToken时,令牌值没有更改。)

根据与Firebase支持相关的@sNash comment,您应该管理除默认发送者id之外的所有发送者id的令牌

怎么做? 一个简单的解决方案是将所有发送方ID及其令牌存储在SharedReferences或db中。当应用程序启动时,通过将存储的令牌与发送程序返回的令牌进行比较,检查每个发送方的令牌是否已更改

FirebaseInstanceId.getInstance().getToken(SENDER_ID, "FCM");
此外,请使用相同的签入onNewToken方法。更改默认令牌时,可能会更改默认令牌以外的令牌


默认发件人是与应用程序连接的Firebase项目相关的发件人,可以在google services中找到。json

@sNash,我想处理令牌到期/刷新场景。我知道默认项目的令牌将交付给onNewToken。我有多个发件人ID。在收到onNewToken回调后,我为每个发送者id调用“String getToken(String authorizedEntity,String scope)”,并将其发送到服务器(避免在onNewToken上传递令牌)。我的理解是,每当默认令牌或其他令牌安全性受到破坏,并且系统确定令牌需要刷新时,应用程序将获得onNewToken回调。这种理解是正确的?@HeyYou onNewToken仅用于默认发件人id。默认发件人id表示它使用google-service.json获取fcm令牌。因此,不会为额外发送方id的令牌刷新调用onNewToken。但我从未测试过通过调用getToken方法来检索默认令牌。我正在使用FirebaseInstanceId.getInstance().getInstanceId()获取默认令牌。以及其他发件人id的令牌,该令牌具有FirebaseInstanceId.getInstance().getToken。@HeyYou和令牌刷新是指当其中一个事件发生时发生。*应用程序删除实例ID*应用程序已在新设备上还原*用户卸载/重新安装应用程序*用户清除应用程序数据我将在调用onNewToken时调用getToken检查额外发件人ID的令牌。@sNash,根据您的答复“onNewToken仅用于默认发件人id。默认发件人id表示它正在使用google-service.json获取fcm令牌。因此,不会为额外发送方id的令牌刷新调用onNewToken。“当其他发件人id的令牌需要刷新时,任何关于如何处理应用程序的想法都会知道或得到回调?@garnet我联系了firebase支持团队并得到了答复。回答摘要:firebase云消息不会自动管理不同发件人id的令牌。所以开发人员负责它的管理。你们必须用自己的方法手动检查它的有效性。嘿,你们找到解决办法了吗?我也有类似的问题,谷歌的文档也不清楚