我有两种类型的问题FirebaseInstanceId.getToken(String authorizedEntity, String scope),一种是多次调用此方法,另一种是调用此方法是否触发FirebaseMessagingService.onNewToken(String token)。
1) 多次调用:根据本文档,一个人会调用getToken(String authorizedEntity, String scope)多次,每次使用不同的发件人 ID,以便能够接收来自多个发件人的消息。我的问题是,每个调用都会返回不同的令牌,还是每个调用都会返回相同的令牌,但现在该令牌也适用于多个发件人?如果我们使用之前使用过的发送者 ID 调用此方法,那么会返回现有令牌还是生成新令牌?
所以,假设我有这个操作顺序
getToken("senderId1", "FCM")并获取tokenAgetToken("senderId2", "FCM")。我会得到A不同的代币吗B?getToken("senderId2", "FCM")。我会得到A,,B还是另一个不同的C?2)会onNewToken被召唤吗?本文档指出,如果令牌发生更改,将调用该方法。那么这是否意味着 ifgetToken返回一个与之前不同的令牌 thenonNewToken也会被调用?如果我们要getToken多次调用以允许从不同的发送者接收,并且每次调用返回不同的令牌,那么onNewToken将继续被调用。
由于建议我们在onNewToken触发时更新服务器,因此我想了解预期的行为并避免在每次调用时更新服务器onNewToken。
在查找数组的大小而不使用C中的sizeof的问题中,提问者通过获取地址然后指定数组索引1来处理类似于int数组的int数组:
int arr[100];
printf ("%d\n", (&arr)[1] - arr);
Run Code Online (Sandbox Code Playgroud)
该值最终成为之后100个元素的"下一个"数组中第一个元素的地址arr.当我尝试这个类似的代码时,似乎没有做同样的事情:
int *y = NULL;
printf("y = %d\n", y);
printf("(&y)[0] = %d\n", (&y)[0]);
printf("(&y)[1] = %d\n", (&y)[1]);
Run Code Online (Sandbox Code Playgroud)
我最终得到:
y = 1552652636
(&y)[0] = 1552652636
(&y)[1] = 0
Run Code Online (Sandbox Code Playgroud)
为什么不是(&y)[1]指向int的"next"指针的地址y?