【发布时间】:2015-09-30 23:40:52
【问题描述】:
根据this post,最佳实践是在客户端过滤频道消息。在集成推送通知时,我还没有找到一种可行的方法来做到这一点。现在,我们的 iOS 客户端会在应用未运行时收到大量无用消息的通知。
【问题讨论】:
-
我在我们的支持系统上收到了您的问题,并将回答他们。我将在这里发布最终答案。
根据this post,最佳实践是在客户端过滤频道消息。在集成推送通知时,我还没有找到一种可行的方法来做到这一点。现在,我们的 iOS 客户端会在应用未运行时收到大量无用消息的通知。
【问题讨论】:
这是 APNS 的缺点,而不是 PubNub。 PubNub 的工作方式是,频道的所有订阅者都会收到在该频道上发布的所有消息。但是,当应用程序在 iOS 上处于后台或根本没有运行时,您的应用程序没有机会在 iOS 设备显示推送通知之前对其进行处理。 Android/GCM 确实允许您的应用在消息显示之前拦截它。
幸运的是,只有一种情况(我能想到),msg 的发送者会收到他们的推送通知版本的消息(意思是,你不能拦截也不能显示它)。
但如果用户在应用程序中停留一两秒(或足够长的时间以接收实时消息和推送通知),那么您可以阻止显示推送消息。但是不需要过滤 UUID,因为当应用程序在 didReceiveRemoteNotification 委托中处于活动状态时,您应该禁止显示所有推送通知,因为您已经在订阅回调中获得了实时消息。
link you referenced (Filter Owner Messages on PubNub Data Streams) 仅用于实时推送通知,Stephen 正在调用我们将在不久的将来推出的一项功能,该功能允许您订阅频道但提供允许您过滤/查询条件的查询对于频道上的消息,例如“where uuid !=”,订阅者的 uuid 在哪里。然后订阅者将不会收到实时或推送通知消息,因为服务器会为您过滤掉它们。
如需全面了解推送通知,请参阅Sending APNS and GCM Messages to Subscribers and Mobile Push Notification Services in One API Call
完整的push notification setup, configuration and implementation, see the docs for each of our SDKs。
另外,请参阅描述how to use iOS silent push notifications to do on device filtering 的我的回答。在 Android 上也可以做同样的事情,但不需要做任何特别的事情,因为您总是有机会在推送通知显示之前对其进行处理。
【讨论】: