Google GCM - 未在 android Lollipop 中接收推送通知
Posted
技术标签:
【中文标题】Google GCM - 未在 android Lollipop 中接收推送通知【英文标题】:Google GCM - Not receiving push notifications in android Lollipop 【发布时间】:2014-11-14 10:01:44 【问题描述】:在我的 android 应用程序中,我使用 GCM 从我的公司服务器接收消息。
我为 c2dm 编写了代码,并按照说明将代码迁移到 GCM。 (http://developer.android.com/google/gcm/c2dm.html)
在 android Lollipop (Nexus 9 wifi) 中,设备注册推送通知并接收推送注册 ID,但是当我从服务器发送消息时,在设备中我没有收到任何消息。
在以前的 android 版本中(从 4.0 到 4.4)我没有任何问题。
你知道 Lollipop 推送通知有什么问题吗?
谢谢
【问题讨论】:
我使用来自 Google Developers Site 的源代码创建了一个项目“Hello world”。 developer.android.com/google/gcm/client.html我没有收到任何通知。我发现,在 Nexus 9 WIFI 中,我没有收到来自任何应用的通知。 【参考方案1】:我们在办公室遇到了同样的问题,这就是我在这里偶然发现您的帖子的原因。我已经测试了三个单独的 Nexus 9 设备(仅限 WiFi),并且在每种情况下,它们都成功注册了推送......但从未收到从服务器发送的任何通知。
我做的第一个测试使用了我们现有的 android 应用程序和服务器。在这不成功之后,我从 Google Play Store 下载了Push Notification Test。这在其他设备(Nexus 5...等)上完美运行,但无法在 Nexus 9 上接收通知。
为了解决 Play Store Test 应用程序过期的可能问题,我创建了一个测试 Android 应用程序和服务器脚本,以查看是否可以进一步缩小问题范围。我遇到了同样的问题。除 Nexus 9 外,我测试的每台设备都注册并收到了推送通知。我尝试改变项目中 Google Play Services 库的版本(从最新版本到几个版本),但这没有效果。
对于我上面提到的最后一次尝试,我使用了此处找到的 GCM 演示应用程序:GCM Client 以及我根据另一个用户的代码修改的 php 脚本(显然删除了键和 reg id):
<?php
$nexus5 = '';
$nexus9 = '';
$nexus9Alt = '';
$registrationIds = array($nexus5,$nexus9,$nexus9Alt);
$apiKey = '';
$msg = array
(
'message' => 'Do you know smell what the rock is cooking?',
'title' => 'Push Test',
'subtitle' => 'This is a subtitle',
'tickerText' => 'This is the ticker',
'vibrate' => 1,
'sound' => 1
);
$fields = array
(
'registration_ids' => $registrationIds,
'data' => $msg
);
$headers = array
(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch );
curl_close( $ch );
echo $result;
更新:我们将办公室中的三款平板电脑更新为 5.0.1 OTA,但平板电脑仍然不会收到推送通知。谷歌也没有关于这些的消息,但希望它会在下一个 OTA 中修复。
更新:1 月 13 日,我们注意到 Nexus 9 开始接收推送通知。显然谷歌修复了它。圈子就完成了。
【讨论】:
【参考方案2】:我有一个相当简单的 Android 版 GCM 应用程序,它在 Kitkat 上运行良好。棒棒糖升级后,出现“显式意图”错误 (Android 5.0 (L) Service Intent must be explicit in Google analytics)。我解决了这个问题,没有错误,也没有设备注册!
【讨论】:
【参考方案3】:我通过在移动网络而不是办公室 WIFI 上测试 GCM 拉取通知来解决这个问题。
【讨论】:
以上是关于Google GCM - 未在 android Lollipop 中接收推送通知的主要内容,如果未能解决你的问题,请参考以下文章
从 android 推送通知单击启动时,意图数据未在活动中更新
将 com.google.android.gcm.GCMBaseIntentService 升级到 com.google.android.gms.gcm.GoogleCloudMessaging
将com.google.android.gcm.GCMBaseIntentService升级到com.google.android.gms.gcm.GoogleCloudMessaging
com.google.android.gcm.GCMBaseIntentService 在哪里?
无法解析“com.google.android.gms.gcm.GcmReceiver”?
Google Cloud Message (GCM) sent android is Error inValid Register