0

我对 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,以便我稍后可以使用 ID 调用发送函数它?

(我意识到有办法通过 GCM 服务器进行双向消息传递,但我仍然想知道如何做到这一点。谢谢!)

4

1 回答 1

0

首先,你必须使用 AsyncTask,因为 register 方法是阻塞的,并且不能被主线程调用。

您可以将注册 ID 保存在共享首选项中并从任何地方访问它。请参阅 GCM 程序员指南中的 deno 代码。

至于使用 send 方法,您应该只将它用于设备到云的消息,即从您的应用程序到您的服务器的消息。要使此类消息到达您的服务器,您的服务器必须与 GCM 服务器建立 XMPP 连接。

对于更简单的云到设备消息传递,您可以通过 HTTP API 将消息从您的服务器发送到您的应用程序。

于 2013-07-01T04:16:58.870 回答