【发布时间】:2015-09-28 15:28:10
【问题描述】:
我的应用服务器已成功向 GCM 发送消息,但是在客户端,没有收到消息,即使它拥有令牌并且已订阅不同的主题。 为了收听传入的消息,我使用了 GcmListenerService 的扩展。由于这是一项服务,因此它从 mainactivity 开始。下面是清单的相关部分:
<!-- [START gcm_permission] -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- [END gcm_permission] -->
<!-- [START gcm_receiver] -->
<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
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="my.app" />
</intent-filter>
</receiver>
<!-- [END gcm_receiver] -->
<!-- [START gcm_listener] -->
<service
android:name="my.app.MyGcmListenerService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<!-- [END gcm_listener] -->
<!-- [START instanceId_listener] -->
<service
android:name="my.app.MyInstanceIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>
<!-- [END instanceId_listener] -->
<service
android:name="my.app.RegisterIntentService"
android:exported="false">
</service>
GCM 监听器如下:
public class MyGcmListenerService extends GcmListenerService {
private static final String TAG = "MyGcmListenerService";
// [START receive_message]
@Override
public void onMessageReceived(String from, Bundle data) {
String message = data.getString("message");
Log.d(TAG, "From: " + from);
Log.d(TAG, "Message: " + message);
if (from.startsWith("/topics/")) {
// message received from some topic.
//TOPICS = {"News","Updates","GeneralInfo"};
if (from.split("/")[2].equals("News")) {
....
如前所述,GCM 侦听器是作为常规服务从 mainactivity 启动的。
//starting the listener service for messages
intentGCMListen = new Intent(this,MyGcmListenerService.class);
startService(intentGCMListen);
在我遵循的示例(GCM quickstart)中,这基本上是我在这部分中部署 GCM 的核心,GCM 侦听器服务没有这样的启动。我认为应该启动它,因为它是一项服务。 任何想法为什么没有从 GCM 服务器下载消息?
更新
我用于将消息从服务器发送到 GCM 的 bash 脚本是:
#!/bin/bash
api_key=AIadasdasdsa
message=$1
topic=/topics/GeneralInfo
curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://gcm-http.googleapis.com/gcm/send -d "{\"to\":\"$topic\",\"data\":{\"message\":\"$message\"}}"
【问题讨论】:
标签: android google-cloud-messaging