我正在尝试在广播请求失败后从我的数据库中删除无效的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_results
和gcm_keys
中看到的那样,不会返回有效令牌。取而代之的是一种类似的令牌。
我没有找到任何这个。为什么我会收到不同的令牌?
- >刚刚发现,如果我得到一个不同的令牌,我应该更换旧的。这引出了另一个问题。当我发送到几个令牌时,如何找到返回令牌所属的请求中的哪个gcm令牌? 结果中的顺序是否始终与请求中的相同?