我想在我的应用中实施Google云消息传递。我有一个类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,但我需要从谷歌获取消息吗?我用webservice连接。我需要发送这个regId服务吗?我的下一步应该是什么?
答案 0 :(得分:2)
这是一张图片,描述了通过GCM服务器从服务器(您的网络服务)向您的设备发送消息的所有步骤。
步骤1和2已经完成(如果我理解你所说的话),因为你检索了注册ID。
因此,您必须按照以下步骤接收通知。
希望这对你有帮助!
答案 1 :(得分:1)
我撰写了一篇博文,介绍了GCM的工作原理以及服务器在此过程中的作用:http://blog.andromo.com/2012/how-does-airbop-push-messaging-work/在本文中,您只需将服务器替换为AirBop服务器即可。
您的下一步是将注册ID发送到将处理您的设备注册的服务器。这将是您的服务器或第三方服务器,如AirBop或Urban Airship。
您应该查看GCM Demo Application教程和GCM架构概述以及GCM sample。
来自Google文档:
这是在移动设备上运行的Android应用程序注册接收消息时发生的事件序列:
(1)Android应用程序第一次需要使用消息传递服务时,它会向GCM服务器发出注册Intent。
此注册Intent(com.google.android.c2dm.intent.REGISTER)包含发件人ID和Android应用程序ID。
注意:由于第一次运行应用程序时没有调用生命周期方法,因此应该在onCreate()上发送注册意图,但前提是该应用程序尚未注册。
(2)如果注册成功,GCM服务器会广播com.google.android.c2dm.intent.REGISTRATION意图,该意图为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如何执行第3步