GCM折叠键未起作用

4
我有一个使用Python/Django编写的应用程序,它正在向GCM发送推送通知,但无法使collapse_key参数生效。每次收到新消息时,它都会创建一个新的通知,而不是将它们合并。以下是Python代码:
  url = 'https://gcm-http.googleapis.com/gcm/send'                                                                                        
  post_data = {                                                                   
      'to': mytoken,                                                                
      'collapse_key': 'myappname',                                                  
      'data': mydata                                                                
  }                                                                               
  headers = {                                                                     
      'Authorization': 'key={}'.format(GCM_API_KEY),                     
      'Content-Type': 'application/json'                                          
  }                                                                                                                                               
  requests.post(                                                                  
      url,                                                                        
      data=json.dumps(post_data),                                                 
      headers=headers) 

通知可以正常传输,但它们无法折叠。我做错了什么吗?
客户端是一个使用phonegap推送通知插件(https://github.com/phonegap-build/PushPlugin)的手机应用程序。插件在设备上处理推送通知,我不确定如何更改它创建和显示通知的方式。
如果其他人遇到相同的问题,看起来解决方法是在数据中传递notId参数。具有相同notId的通知将替换彼此。

您的设备关闭时,它们不会崩溃吗? - Mark Galloway
你能发一下创建通知的代码片段吗?顺便提一下:collapse_key 用于在 GCM 服务器上折叠通知,如果每次收到通知都创建一个新的通知,那么这与 collapse_key 没有任何关系,而是你的错误。此外,如果你的设备在线,那么就没有必要使用 GCM 折叠,因为通知可以立即传递(如果你触发第二个通知,第一个通知已经从 GCM 服务器中删除,因为第一个通知已经传递到设备)。 - sschmid
1
这里的文档来看,我认为你应该尝试在headers中设置collapse_key参数。 - bjiang
看起来我误解了“collapse_key”的目的,我没有意识到它只用于离线通知。 - sean2000
1个回答

11

当设备处于离线状态时,例如我的设备处于飞行模式并接收到5条带有相同collapse_key的消息,那么在飞行模式关闭后,设备只会收到最后一条消息。

如果设备持续连接到GCM,则每个消息都会到达您的设备。

听起来您想在通知上设置一个标签,这样当新消息到达时它将替换现有通知。


我在 FCM 文档中没有看到这个不幸的细微差别被提及。你有这个信息的引用吗? - gabe
我终于在一个奇怪的地方找到了一些官方文档(勉强)证实了这一点:https://firebase.google.com/docs/cloud-messaging/understand-delivery?platform=ios#what-data-exported - gabe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接