在最佳服务中保持 pubnub 订阅处于打开状态

Is leaving a pubnub subscription open in a service optimal

我可以选择使用 GCM 推送通知,但我决定让 pubnub 订阅在后台的 运行 服务中打开。

这是一个聊天界面,每个用户在后台打开他的频道,只有在聊天屏幕打开时才发布到目标频道。

这样做有什么缺点,如果这不是最佳方式,我可以做些什么来优化它?

PubNub Android 后台服务与 GCM

由于后台服务的电池使用情况,使用 GCM 可能是最终用户更容易接受的方式。使用 PubNub,您只需 publish the message including the GCM push payload,设备将在应用程序处于活动状态时接收实时消息,并在应用程序未处于活动状态(或未 运行ning)时接收推送通知。

但您可能需要在后台保持与 PubNub 的连接。现在你必须决定你是否want this service to be started when the device is powered on (even if the app is never started) or only start service when the app is first started. Either way, read up on Android Services。我假设你 (@olayinka) 知道这一点,但只是把它放在这里供更广泛的读者阅读这篇文章 post.

使用 Android 6(不是 5),您必须通知最终用户您正在后台启动对 运行 的服务,并且用户必须允许它。解决此问题的唯一方法是将应用列入白名单。

打瞌睡模式和应用程序白名单

可通过三种方式将应用列入白名单,所有这些方式都需要用户交互。您可以阅读 full docs about doze mode and app whitelisting 但这里是要点:

  1. 用户可以在设置>电池>电池优化中手动配置白名单

  2. 持有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限的应用程序可以触发系统对话框,让用户直接将应用程序添加到白名单,而无需进入设置。该应用程序触发 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 以触发对话框。这是一个普通权限:请求它的应用将始终被授予该权限,无需用户批准或查看。

  3. 持有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限的应用程序可以触发系统对话框,让用户直接将应用程序添加到白名单,而无需进入设置。该应用程序触发 ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent 以触发对话框。这是一个普通权限:请求它的应用程序将始终被授予该权限,而无需用户批准或查看它。注意:据一些博客报道,当他们尝试这样做时,应用程序已从 Google Play 商店中删除并受到审查。

  4. PARTIAL_WAKE_LOCK 需要继续在后台接收所有 Android 版本的消息,以防止设备 打瞌睡 .