如何使用 GCM 在 Android 中解析或实际获取推送消息

Posted

技术标签:

【中文标题】如何使用 GCM 在 Android 中解析或实际获取推送消息【英文标题】:How to parse or actually get push message in Android using GCM 【发布时间】:2014-06-28 23:49:57 【问题描述】:

我正在使用 Google (http://developer.android.com/google/gcm/client.html) 提供的示例实现 GCM 客户端,但是当我发送测试消息时,我不知道如何接收它

这是我用来发送消息的代码:

String msg = "";                        
gcm = GoogleCloudMessaging.getInstance(BaseHeaderActivity.this);

try 
    Bundle data = new Bundle();
    data.putString("my_message", "Test message");
    data.putString("my_action", "com.google.android.gcm.demo.app.ECHO_NOW");
    String id = Integer.toString(msgId.incrementAndGet());
    gcm.send(ListCategoriesActivity.SENDER_ID + "@gcm.googleapis.com", id, data);
    msg = "Sent message";
 
catch (IOException ex) 
    msg = "Error :" + ex.getMessage();


return msg;

消息似乎发送正常,然后来自 GcmIntentService 的方法 void onHandleIntent(Intent intent) 在我发送消息后的几秒钟内执行,但问题是在意图的附加内容中没有像我这样的键放入发送消息的方法:

data.putString("my_message", "Test message");
data.putString("my_action", "com.google.android.gcm.demo.app.ECHO_NOW");

这是我的 GcmIntentService 类:

public class GcmIntentService extends IntentService 

private final String TAG = "GcmIntentService";

public GcmIntentService() 
        super("GcmIntentService");
    

@Override
protected void onHandleIntent(Intent intent) 

    Bundle extras = intent.getExtras();

    Set<String> keys = extras.keySet();
    Log.i(TAG, "Received: " + extras.getString("my_message"));



...

日志为“Received: null”,extra 中的键为: [message_type, google.message_id, event, android.support.content.wakelockid]

有什么想法吗??

提前致谢。

【问题讨论】:

我也面临同样的问题。你得到答案了吗? 【参考方案1】:

您正在尝试将上游消息(设备到云)从您的设备发送到您的服务器。只有当您的服务器与 Google 的 GCM CCS 服务器建立 XMPP 连接时,它才会起作用。即使它确实有效,消息也会到达您的服务器,而不是您的设备。

只有当您的服务器将消息发送到您的设备时,您的意图服务才会收到您的消息。

【讨论】:

以上是关于如何使用 GCM 在 Android 中解析或实际获取推送消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Android Studio 中使用 GCM

Android/Firebase - 在 GCM 事件中解析时间戳时出错 - 时间戳为空

如何使用 XMPP 和 GCM 在 Android 中制作聊天应用程序

如何在推送通知 (GCM) android 中发送图像?

GCM“升级”为FCM

无法解析“com.google.android.gms.gcm.GcmReceiver”?