调用 FirebaseInstanceId.getToken 的行为

hca*_*ams 5 android firebase firebase-cloud-messaging

我有两种类型的问题FirebaseInstanceId.getToken(String authorizedEntity, String scope),一种是多次调用此方法,另一种是调用此方法是否触发FirebaseMessagingService.onNewToken(String token)

1) 多次调用:根据本文档,一个人会调用getToken(String authorizedEntity, String scope)多次,每次使用不同的发件人 ID,以便能够接收来自多个发件人的消息。我的问题是,每个调用都会返回不同的令牌,还是每个调用都会返回相同的令牌,但现在该令牌也适用于多个发件人?如果我们使用之前使用过的发送者 ID 调用此方法,那么会返回现有令牌还是生成新令牌?

所以,假设我有这个操作顺序

  1. 调用getToken("senderId1", "FCM")并获取tokenA
  2. 称呼getToken("senderId2", "FCM")。我会得到A不同的代币吗B
  3. 称呼getToken("senderId2", "FCM")。我会得到A,,B还是另一个不同的C

2)会onNewToken被召唤吗?本文档指出,如果令牌发生更改,将调用该方法。那么这是否意味着 ifgetToken返回一个与之前不同的令牌 thenonNewToken也会被调用?如果我们要getToken多次调用以允许从不同的发送者接收,并且每次调用返回不同的令牌,那么onNewToken将继续被调用。

由于建议我们在onNewToken触发时更新服务器,因此我想了解预期的行为并避免在每次调用时更新服务器onNewToken

AL.*_*AL. 4

我的问题是,每个调用都会返回不同的令牌,还是每个调用都会返回相同的令牌,但现在该令牌也适用于多个发件人?

getToken()/getToken(String, String)将返回相同的令牌,直到相应的令牌过期。请注意,出于同样的原因,我的意思是它们为每个发件人返回的相同标记。IE:

  • getToken()返回默认项目的注册令牌(例如 tokenDefaultSenderId)
  • getToken(String, String)返回与其关联的发件人的注册令牌(例如 tokenSenderId2)

如果我们使用之前使用过的发送者 ID 调用此方法,那么会返回现有令牌还是生成新令牌?

  1. 好的。
  2. 您将获得令牌B
  3. 您将再次获得令牌B

令牌与其关联的发送者绑定在一起。

onNewToken 会被调用吗?...那么这是否意味着如果 getToken 返回与之前不同的令牌,那么 onNewToken 也会被调用?

onNewToken()只会返回默认发件人的令牌(强调我的):

在生成默认 Firebase 项目的新令牌时调用。

问题在于onNewToken(),它仅在前一个令牌过期时才会触发 - 需要问的是,如果默认发件人的令牌过期了,其他发件人还需要做什么?因此,最好的解决方法是调用getToken()您拥有的每个发件人,如下所示:

public void onNewToken(String token){
    String default = token;
    String sender2 = getToken("senderId2", "FCM");
    // and so on for each of your sender, then save the tokens as needed
}
Run Code Online (Sandbox Code Playgroud)