GCM使用GoogleCloudMessaging
时遇到一个奇怪的问题,通知在开始时起作用,但在一段时间后(大约一个小时左右)以某种方式停止工作。
另一件事,每当我注册GoogleCloudMessaging.getInstance(context).register(SENDER_ID);
时,我都会接到onReceive()
WakefulBroadcastReceiver
&{39}的REGISTRATION_ID
来电话。其中包含{{1}}捆绑附加内容。这是常见的事情,我应该忽略它吗?
我已按照此处的教程Implementing GCM client。
编辑:问题在于一个名为Localytics的库,它也处理推送通知。与GCM设置无关。
答案 0 :(得分:2)
每条GCM消息都有过期日期,消息可能已过期,或设备未连接,消息不是实时消息。
GCM使用广播接收器按以下步骤传递消息: 1. onClick()调用gcm.send() 2.广播接收器中的onReceive()方法被触发 3.该方法处理GCM消息
WakefulBroadcastReceiver 是一种特殊类型的广播接收器,负责为您的应用创建和管理部分唤醒锁定。它将处理GCM消息的工作传递给服务(通常是IntentService),同时确保设备不会在转换中重新进入休眠状态。如果您在将工作转换为服务时未进行唤醒锁定,则可以有效地允许设备在工作完成之前重新进入休眠状态。最终结果是应用程序可能无法完成处理GCM消息,直到将来某个任意点,这不是您想要的。
但是,使用WakefulBroadcastReceiver 不是要求。如果您的应用不需要服务,则可以使用常规的BroadcastReceiver。
根据GCM文档,在注册后,应用程序调用storeRegistrationId()将注册ID存储在共享首选项中以供将来使用。这只是持久化regID的一种方式。因此registration_id有利于数据持久性。
答案 1 :(得分:0)
编辑:问题在于一个名为Localytics的库,它也处理推送通知。与GCM设置无关。