首页 文章

Firebase Cloud 消息传递 - 如何验证令牌?

提问于
浏览
15

我正在使用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 回答

  • 2

    在发送下游消息之前,无法验证令牌是否仍然有效 . 您需要做的是在发送消息后检查响应,然后检查响应是否包含任何错误 .

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

    在“Downstream message error response codes of FGC”部分中,您将找到记录的每个可能的状态响应 .

  • 6

    实际上有一个解决方法,你可以使用 dry_run = true

    此参数设置为true时,允许开发人员在不实际发送消息的情况下测试请求 .

    firebase docs

    如果用户取消订阅,您会收到 NotRegistered 的回复,但不会执行真正的发送

  • 5

    不存在这样的事情,您可以从令牌获得的唯一信息是应用信息,而不是它是否有效

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

    当你去发送推出时,你应该做的是观察响应,如果键不再有效,响应会告诉你应该用 NotRegistered 删除哪些键 .

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

  • 2

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

    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"}]}
    

    我从谷歌的火力支持团队得到了这个答案 .

相关问题