Firebase云消息传递 – 如何validation令牌?

我正在使用Firebase云消息传递(FCM),并且每次在客户设备上生成一个新的令牌时,都会根据下面的代码…我将这个新的令牌发送到我的服务器数据库(云),我将其保存以便能够使用CFM API将来自服务器的推送通知发送到设备。

//public class CFMInstanceIDService extends FirebaseInstanceIdService ... public void onTokenRefresh() { ... String cfmToken = FirebaseInstanceId.getInstance().getToken(); ... sendRegistrationToServer(customerGuid, cfmToken); } 

通过这样做,我在服务器上有一个客户login的所有(多个)设备列表。 (平板电脑,手机,iPhone,Android等)

有没有办法在任何时候validation/validation令牌?

我想知道/确保所有与客户关联的令牌都属于真实设备。 我不想将推送通知发送到不存在的令牌。

Solutions Collecting From Web of "Firebase云消息传递 – 如何validation令牌?"

没有这样的东西存在,你可以从令牌获得的唯一信息是应用程序的信息,而不是它是否有效

https://developers.google.com/instance-id/reference/server#get_information_about_app_instances

你应该做的是当你去发送推出,如果密钥不再有效的时候正在注意响应,响应会告诉你什么密钥应该被删除NotRegistered

https://firebase.google.com/docs/cloud-messaging/server

下面是一个示例curl请求,显示如何validation令牌而不必实际发送消息:

 curl -H "Content-Type: application/json" -H "Authorization: key=$FCM_API_KEY" https://fcm.googleapis.com/fcm/send -d '{"registration_ids":["$FCMTOKEN"]}' 

示例无效响应:

 {"multicast_id":7452350602151058088,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]} 

示例有效的响应:

 {"multicast_id":9133870199216310277,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1502817580237626%f590ddc2f9fd7ecd"}]} 

我从谷歌的Firebase支持团队得到了这个答案。

在发送下行消息之前,无法validation令牌是否仍然有效。 你需要做的是在发送消息之后检查响应,然后检查响应是否包含任何错误。

例如,如果服务器返回200 + error:NotRegistered http代码,则表示现有的注册令牌可能不再有效。

在“ FGC的下游消息错误响应代码 ”一节中,可以find所有可能的状态响应logging。