防止在您发布到 PubNub 时向您发送推送通知

Prevent push notifications to be sent to you when you publish to PubNub

我正在 iOS 上构建聊天功能。我正在使用 PubNub 的 publish/subscribe 系统在客户端之间发送消息。

问题:

每当我发布到我订阅的频道时,我也会收到我发送的消息的推送通知。虽然,当应用程序在前台时,我可以简单地忽略它,但是当通知延迟并且应用程序进入后台时,问题就出现了。

我想只在其他人向频道发送消息时接收推送通知。收到您发送消息的通知没有意义。

我正在考虑的一个解决方案是为推送通知创建额外的渠道,但我发现这样做效率低下而且有点老套。请告诉我还有另一种解决方案。

PubNub 发件人识别实施

最佳解决方案是使用静默推送通知并在消息负载中包含发件人的 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 在该平台上工作。

很快就会有一个更优雅的解决方案,但在推出这些增强功能之前,以上内容应该可以满足您的需求。

使用pn_exceptions排除设备[APNS2]

最近,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)"
}