我对java和android开发都很陌生,所以希望这个问题足够具体: 我想使用GoogleCloudMessaging编写一个hello world应用程序。现在,我希望我的应用程序在googleapis服务器上注册,获取注册ID,然后将其发送到我的服务器。我稍后会担心服务器响应。我将使用该包:
import com.google.android.gms.gcm.GoogleCloudMessaging
我知道我需要使用以下代码将我的设备注册到云端:
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
String registrationId = gcm.register(senderId);
我的问题是我在哪里打电话给他?在我的MainActivity onCreate()中?我想我不能这样做,因为它是主线程上的网络IO,但是如果我创建一个AsyncTask,我怎么做它以便我的主线程可以看到我的registrationId所以我可以稍后调用send函数和ID它?
(我意识到有办法通过GCM服务器进行双向消息传递,但我仍然想知道如何这样做。谢谢!)
答案 0 :(得分:0)
首先,您必须使用AsyncTask,因为register方法是阻塞的,并且主线程无法调用。
您可以在共享首选项中保存注册ID,并从任何地方访问它。请参阅GCM程序员指南中的deno代码。
至于使用send方法,您应该只将它用于设备云消息,这些消息是从您的应用程序到服务器的消息。要使此类消息到达您的服务器,您的服务器必须与GCM服务器建立XMPP连接。
对于更简单的云到设备消息传递,您可以通过HTTP API将消息从服务器发送到您的应用。