我正在iOS上构建聊天功能。我正在使用PubNub的发布/订阅系统在客户端之间发送消息。
问题:
每当我发布到我订阅的频道时,我也会收到我发送的消息的推送通知。虽然,我可以在应用程序处于前台时忽略这一点,但是当通知延迟并且应用程序进入后台时会出现问题。
我希望只有在其他人向频道发送消息时才会收到推送通知。收到您发送消息的通知是没有意义的。
我正在考虑的一个解决方案是为推送通知创建额外的通道,但我发现效率低且有点hacky。请告诉我还有另一种解决方案。
答案 0 :(得分:2)
最佳解决方案是使用静默推送通知,并在邮件有效负载中包含发件人的UUID。这是一个例子:
{
'pn_apns': {
'aps': {
'content-available':1
},
'sender_id':'user123',
'content':'this could be more key/values that you can process on the device'
},
'data': 'realtime key/values goes here'
}
然后在设备的静音推送处理中,您可以执行以下操作:
if uuid != my_uuid then display msg; else do nothing
您可以使用我们的Badge Count Demo应用使用无提示推送通知在设备上收到静音推送通知时获取历史记录,以计算准确的徽章计数。只需将历史记录获取代码替换为是我的代码。
您还应该查看Configuring a Silent Notification Apple Documentation以获取有关静音推送如何工作的完整详细信息。
默认情况下,Android推送通知是静默的,您必须明确显示它们,以便在需要时使用GCM在该平台上运行。
很快就会有一个更优雅的解决方案,但在推出这些增强功能之前,上面的内容应该能满足您的需求。
答案 1 :(得分:0)
最近,PubNub移动推送网关已更新为使用APNS2。 通过此更新,您现在可以使用 pn_exceptions 从推送通知中排除某些设备令牌。
这是更新后的有效载荷的外观。
{
"pn_apns" : {
"aps" : {
"alert" : {
"body" : "hello (via APNS)"
}
},
"pn_exceptions" : [
currentDeviceToken
]
},
"pn_gcm" : {
"alert" : "hello (via FCM)",
"pn_exceptions" : [
someDeviceToken
]
},
text : "hello (in realtime)"
}