新的谷歌云消息 API
Posted
技术标签:
【中文标题】新的谷歌云消息 API【英文标题】:new Google Cloud Messaging API 【发布时间】:2013-07-16 18:08:15 【问题描述】:我正在使用 curl 使用 php 发送推送通知,结果似乎返回正常:
"multicast_id":2345735671345346,"success":2,"failure":0,"canonical_ids":0,"results":["message_id":"0:13456457587969%375ed23445237ecd","message_id":"0:12344526107806%375ed3439fd7ecd"]
所以我猜测消息已发送,问题出在BroadcastReceiver
子类上。
我的广播接收器代码:
package com.example.myexample.pushnotifications;
public class GCMBroadcastReceiver extends BroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
Log.d(TAG, "onReceive method executed properly");
//NotificationManager and NotificationCompat.Builder code to build a notification
然后我的androidManifest.xml
获得权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" /
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="com.example.myexample.pushnotifications.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.myexample.pushnotifications.permission.C2D_MESSAGE" />
对于应用标签内的接收者:
<receiver
android:name="com.example.myexample.pushnotifications.GCMBroadcastReceiver"
android:enabled="true"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.myexample.pushnotifications" />
</intent-filter>
</receiver>
问题是广播接收者永远不会收到消息。
【问题讨论】:
com.example.myexample.pushnotifications
是您的 Android 应用的完整包名吗?
com.example.myexample.pushnotifications 是 BroadcastReceiver 子类所在的位置,但活动在 com.example.myexample.activities 中
但是在清单顶部声明的包名是什么?是com.example.myexample
吗?如果是,那是你应该在所有与 GCM 相关的清单声明(权限、意图过滤器)中使用的包名称,广播接收器的完整类名除外。
com.example.myexample 是在顶部声明的,我应该在没有“pushnotifications”的情况下继续使用它吗?
是的,我添加了您需要更改的内容的答案。
【参考方案1】:
假设app的包是com.example.myexample
,需要做如下改动:
<permission
android:name="com.example.myexample.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.myexample.permission.C2D_MESSAGE" />
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.myexample" />
</intent-filter>
【讨论】:
以上是关于新的谷歌云消息 API的主要内容,如果未能解决你的问题,请参考以下文章
GCM 是如何工作的? (适用于 Android 的谷歌云消息传递)
身份验证不适用于使用 NodeJS 进行的谷歌云 API 身份验证