【问题标题】:Prevent push notifications to be sent to you when you publish to PubNub防止在您发布到 PubNub 时向您发送推送通知
【发布时间】:2016-06-28 12:21:27
【问题描述】:

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

问题:

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

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

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

【问题讨论】:

    标签: ios chat pubnub


    【解决方案1】:

    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 应用程序,该应用程序使用静默推送通知在设备收到静默推送通知时获取历史记录,以计算准确的徽章计数。只需将 history fetch code 替换为 is this from me 代码即可。

    您还应该查看Configuring a Silent Notification Apple Documentation,了解有关静默推送工作原理的完整详细信息。

    默认情况下,Android 推送通知是无声的,您必须明确显示它们,以便在需要时可以使用 GCM 在该平台上工作。

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

    【讨论】:

    • 嗨克雷格!这仍然是最好的方法,还是有任何其他新的可用解决方法?我正在从 iOS 10 向 iOS 11 发送消息。如果使用警报条目发送,iOS 11 会正确显示警报,但也会显示发件人。如果使用您的建议,它适用于发件人,但收件人,因为它是 iOS 11,它不会始终收到通知。我认为这与 iOS 11 StackoverflowApple 上的这个问题有关。谢谢!
    • 实际上它适用于 Native iOS,因为当应用程序在前台时,推送通知不会显示为 documentation 指定的(除非您实际指定 content-available,否则通知始终显示)。问题出现在 React Native 中,无论应用程序是否在前台,都会显示通知。这可能需要一个单独的问题。
    • 如果您迁移到 Apple 的新 APNS2 推送令牌(我们将很快向公众发布),您可以添加带有设备推送令牌数组的 pn_exceptions key,以排除接收推送通知。所以,当然,总是包含发送设备的推送令牌。很快就会有公告。
    • 这是个好消息,非常感谢您这么快回答!我们找到了在应用程序处于前台时实际显示通知的原因。这是由于我们在应用程序中使用的另一个库“OneSignal”
    • 敬请期待这篇文章的新答案,了解即将推出的新 APNS2 Push Token 功能。很多好东西很快就会公布。
    【解决方案2】:

    使用 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)"
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多