GCM客户端不接收下游消息

时间:2015-09-28 15:28:11

标签: android google-cloud-messaging

我的应用服务器正在向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\"}}"

1 个答案:

答案 0 :(得分:0)

我认为您在代码中缺少BroadcastReceiver,用于接收GCM服务器为您的应用客户端处理发送的广播。您需要检查代码中的以下行:

    <div class="nav">
      <ul id="show">
        <li id="link1"><a href="#portfolio">Portfolio</li></a>
        <li id="link2"><a href="#about">About</li></a>
        <li id="link3"><a href="#email">Contact</li></a>
        <hr/>
      </ul>
    </div>

有关更多代码说明,请查看此tutorial