我正在使用Firebase Cloud 消息传递(FCM),并且每次在客户设备上生成新令牌时,根据下面的代码...我将这个新的TOKEN发送到我的服务器数据库( Cloud ),我保存它以便能够使用CFM API将服务器的未来 Push Notification 发送到设备 .
//public class CFMInstanceIDService extends FirebaseInstanceIdService ...
public void onTokenRefresh() {
...
String cfmToken = FirebaseInstanceId.getInstance().getToken();
...
sendRegistrationToServer(customerGuid, cfmToken);
}
通过这样做,我在服务器上有一个客户登录的所有(多个)设备的列表 . (平板电脑,手机,iPhone,Android等)
Is there any way to verify/validate a Token at any time?
我想知道/确保我与客户关联的所有令牌都属于真实设备 . 我不想将推送通知发送给不存在的令牌 .
4 回答
在发送下游消息之前,无法验证令牌是否仍然有效 . 您需要做的是在发送消息后检查响应,然后检查响应是否包含任何错误 .
例如,如果服务器返回
200 + error:NotRegistered
http代码,则意味着现有的注册令牌可能不再有效 .在“Downstream message error response codes of FGC”部分中,您将找到记录的每个可能的状态响应 .
实际上有一个解决方法,你可以使用
dry_run = true
firebase docs
如果用户取消订阅,您会收到
NotRegistered
的回复,但不会执行真正的发送不存在这样的事情,您可以从令牌获得的唯一信息是应用信息,而不是它是否有效
https://developers.google.com/instance-id/reference/server#get_information_about_app_instances
当你去发送推出时,你应该做的是观察响应,如果键不再有效,响应会告诉你应该用
NotRegistered
删除哪些键 .https://firebase.google.com/docs/cloud-messaging/server
下面是一个示例curl请求,它显示如何验证令牌而不必实际发送消息:
示例无效响应:
示例有效响应:
我从谷歌的火力支持团队得到了这个答案 .