-2

我想在我的应用程序中实现谷歌云消息传递。我有一个 GCMIntentService 类,我添加了清单权限并将此代码添加到主要活动:

checkNotNull(SENDER_ID, "SENDER_ID");
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);

requestWindowFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_main);
extras = getIntent().getExtras();

if (savedInstanceState == null) {

    if (extras == null) {

        GlobalConfig.setAPPLICATION_ID(APP_ID);

    } else {

        GlobalConfig.setAPPLICATION_ID(extras.getInt("application_id", 0));
    }

} else {

    MY_DEBUG.print("SavedInstanceState is not null");

}

GlobalConfig.setBookmark(0);

//notifications
final String regId = GCMRegistrar.getRegistrationId(this);
Log.i(TAG, "registration id  " + regId);

if (regId.equals("")) {


    GCMRegistrar.register(this, SENDER_ID);

} else {

    Log.v(TAG, "Already registered");

}

我得到了 RegId,但我还需要什么才能从谷歌获取消息?我与网络服务连接。我需要将此 regId 发送到服务吗?我的下一步应该是什么?

4

2 回答 2

2

这是一张图片,描述了通过 GCM 服务器从服务器(您的网络服务)向您的设备发送消息的所有步骤。

第 1 步和第 2 步已经完成(如果我理解您所说的话),因为您检索了注册 ID。

因此,您必须按照以下步骤获取通知。

希望这对你有帮助!

于 2012-12-18T14:51:17.037 回答
1

我写了一篇博客文章,描述了 GCM 的工作原理以及服务器在此过程中的作用:http: //blog.andromo.com/2012/how-does-airbop-push-messaging-work/在文章中你可以简单地将您的服务器替换为 AirBop 服务器。

下一步是将注册 ID 发送到将处理您的设备注册的服务器。这将是您的服务器或第三方服务器,例如AirBopUrban Airship

您可能应该查看GCM 演示应用程序教程和 GCM 架构概述,以及GCM 示例

来自谷歌文档:

这是在移动设备上运行的 Android 应用程序注册以接收消息时发生的事件序列:

(1) Android 应用程序第一次需要使用消息服务时,它会触发一个注册 Intent 到 GCM 服务器。

此注册 Intent (com.google.android.c2dm.intent.REGISTER) 包括发送者 ID 和 Android 应用程序 ID。

注意:因为第一次运行应用程序时没有调用生命周期方法,所以注册意图应该在 onCreate() 上发送,但前提是应用程序尚未注册。

(2) 如果注册成功,GCM 服务器会广播一个 com.google.android.c2dm.intent.REGISTRATION Intent 给 Android 应用一个注册 ID。

Android 应用程序应存储此 ID 以供以后使用(例如,检查 onCreate() 是否已注册)。请注意,Google 可能会定期刷新注册 ID,因此您应该在设计您的 Android 应用程序时理解 com.google.android.c2dm.intent.REGISTRATION 意图可能会被多次调用。您的 Android 应用程序需要能够做出相应的响应。

(3)为完成注册,Android应用程序将注册ID发送给应用服务器。应用程序服务器通常将注册 ID 存储在数据库中。

注册 ID 一直持续到 Android 应用程序明确取消注册,或者直到 Google 为您的 Android 应用程序刷新注册 ID。

您处于上述列表中的第三步。您可以通过查看ServerUtilities类中的 register() 方法来了解 gcm-demo-client 如何执行第三步

于 2012-12-18T15:58:45.107 回答