我可以选择使用GCM进行推送通知,但我决定在后台运行正在运行的服务中保留pubnub订阅。
这是一个聊天界面,每个用户在后台打开自己的频道,只在聊天屏幕打开时发布到目标频道。
这有什么缺点,如果这不是最佳方式,我该怎么做才能优化它?
答案 0 :(得分:4)
由于感知到后台服务的电池使用情况,使用GCM对于最终用户来说可能是更可接受的方式。使用PubNub,您只需publish the message including the GCM push payload,设备将在应用处于活动状态时收到实时消息,并在应用未激活(或未运行)时收到推送通知。
但也许您需要在后台保持与PubNub的连接。现在您必须决定是否want this service to be started when the device is powered on(即使应用程序从未启动过)或仅在应用程序首次启动时启动服务。无论哪种方式,read up on Android Services。我认为你(@olayinka)知道这一点,但只是把它放在这里,以便更广泛的读者阅读这篇文章。
使用 Android 6 (而不是5),您必须通知最终用户您正在启动服务以在后台运行,并且用户必须允许它。解决这个问题的唯一方法是将应用程序列入白名单。
将应用程序列入白名单有三种方法,所有这些方法都需要用户交互。您可以阅读full docs about doze mode and app whitelisting,但以下是重点:
用户可以在设置>中手动配置白名单。电池>电池优化。
持有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限的应用可以触发系统对话框,让用户直接将应用添加到白名单,而无需进行设置。该应用程序触发ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS Intent以触发对话框。这是一个正常的权限:请求它的应用程序将始终被授予权限,而无需用户批准或查看。
拥有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
权限的应用可以触发系统对话框,让用户直接将应用添加到白名单,而无需进行设置。该应用程序触发ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
Intent以触发对话框。这是一个正常的权限:请求它的应用程序将始终被授予权限,而无需用户批准或查看它。注意:某些博客已经报道过,应用程序已从Google Play商店中删除,并在尝试执行此操作时受到详细审查。
PARTIAL_WAKE_LOCK需要在后台接收所有Android版本的邮件,以防止设备打瞌睡。