2013-02-07 100 views
7

我正面临一个奇怪的问题。如果在从服务器端发送消息的时候连接到互联网,那么我的手机中会收到推送通知。但是,如果当时没有连接到互联网,而是在一段时间后连接到互联网。我没有收到该通知。根据我的知识,所有这些通知应该显示在我们联机的时候,因为GCM服务器存储所有这些消息。我收到所有其他应用的通知。我还给了清单中的wakelock权限。可能是什么问题?来自服务器端,客户端还是移动设备?请帮助...Sometime Not Receiving push notification GCM in Mobile

这个值是从第三方服务器发送到GCM服务器(.NET服务器):

String postdata= "collapse_key=score_update&time_to_live=2419200&delay_while_idle=1&data.message=‌​" + 
message + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceToken + "" 

由于提前

回答

10

delay_while_idle=1矛盾Also I have given wakelock permission in manifest

delay_while_idle=1意味着如果消息处于空闲状态(关闭,离线,锁定屏幕等),则该消息不会到达该设备。如果你想让你的wakelock许可有所作为,请将其更改为0。

只是为了澄清 - 消息应该在设备停止空闲后才能到达设备(只要设备没有空闲太久,其中“太长”由指定的time_to_live确定)。

下面是从GCM文档相关报价:

delay_while_idle

如果包括,则表示该消息应该不会立即如果设备处于空闲状态发送 。服务器将等待设备成为 活动状态,然后仅发送每个collapse_key值 的最后一条消息。可选的。默认值为false,并且必须是JSON 布尔值。

time_to_live

多长时间(以秒计)的消息应该被保存在存储GCM如果 装置离线。可选(默认生存时间为4周,并且必须将 设置为JSON编号)。

+0

你确定。因为在文档中我发现delay_while_idle标志应该是真的。所以在服务器端使用.net服务器我传递delay_while_idle = 1(true),因为0(false)。如果您确认,请让我知道...... – ARIJIT

+1

“空闲时延迟”意味着它所说的 - 在设备闲置时延迟信息传递。当设备返回激活状态(在线,显示屏显示)时,应收到消息。如果您想唤醒设备并在设备被锁定时显示通知,则唤醒锁定权限是相关的。这就是为什么当'delay_while_idle = 0'时才使用它。 – Eran

+0

非常感谢....还需要将增量值附加到折叠键值,即score_update。 – ARIJIT

相关问题