一次发送到多个设备时,GCM会收到无效令牌

时间:2015-06-10 12:17:02

标签: python token google-cloud-messaging

我正在尝试在广播请求失败后从我的数据库中删除无效的GCM代币。

我通过以下方式发送:

payload = {
            "registration_ids": gcm_keys,
            "data": messageData
        }
headers = {
    'Content-type': 'application/json',
    'Authorization': Message_Broker.api_key
}

try:
    return requests.post(Message_Broker.host, data=json.dumps(payload), headers=headers)

让我说我尝试发送消息给:

gcm_keys = ['daöodaeöoijiö','12345','fwiorjpfwj'] # Lets pretend the second one is a valid token

从响应对象的内容中我得到一个这样的字典:

response_results = [{u'error': u'InvalidRegistration'}, {u'registration_id': u'1234567', u'message_id': u'0:14339323424213768%540eeb39f9fd7aed'}, {u'error': u'InvalidRegistration'}]

为了找出哪些令牌失败,我用列表理解做了一个集合减法:

failed_keys = list(set(gcm_keys) - set([r.get('registration_id') for r in response_results]))

这应该只返回产生错误的令牌。

我的第一个问题是,有更常见的方法可以做到这一点或任何一种最佳做法吗?

第二个问题是,正如您在response_resultsgcm_keys中看到的那样,不会返回有效令牌。取而代之的是一种类似的令牌。 我没有找到任何这个。为什么我会收到不同的令牌?

- >刚刚发现,如果我得到一个不同的令牌,我应该更换旧的。这引出了另一个问题。当我发送到几个令牌时,如何找到返回令牌所属的请求中的哪个gcm令牌? 结果中的顺序是否始终与请求中的相同?

1 个答案:

答案 0 :(得分:2)

响应正文的结果参数应该有一个对象数组,这些对象按照与请求相同的顺序列出。请参阅here

相关问题