10

我需要在我的应用程序中实现 c2dm。有没有人也在这样做?请帮助..一些教程将非常有帮助,或者如果您已经完成了 c2dm 实现,那么教程将不胜感激。

请帮忙。

4

2 回答 2

26

我继续下载了适用于 Android 的 Chrome2Phone 源代码,并通过该示例了解了它的工作原理,我在实现应用程序的服务器端时遇到了最大的麻烦。

下载地址: http ://code.google.com/p/chrometophone/source/checkout

或svn它:

svn checkout http://chrometophone.googlecode.com/svn/trunk/ chrometophone-read-only

您应该了解的基本内容。

在 C2DMBaseReciever 类中,您有:

@Override
    public final void onHandleIntent(Intent intent) {
        try {
            Context context = getApplicationContext();
            if (intent.getAction().equals(REGISTRATION_CALLBACK_INTENT)) {
                handleRegistration(context, intent);
            } else if (intent.getAction().equals(C2DM_INTENT)) {
                onMessage(context, intent);
            } else if (intent.getAction().equals(C2DM_RETRY)) {
                C2DMessaging.register(context, senderId);
            }
        } finally {
            //  Release the power lock, so phone can get back to sleep.
            // The lock is reference counted by default, so multiple 
            // messages are ok.

            // If the onMessage() needs to spawn a thread or do something else,
            // it should use it's own lock.
            mWakeLock.release();
        }
    }

此方法从 C2DM 服务接收意图并处理它们。

在 handleRegistration 方法中,您将看到一些如下所示的代码:

} else {
            try {
                onRegistrered(context, registrationId);
                C2DMessaging.setRegistrationId(context, registrationId);
                //Add some code here to send your server the registration ID for this phone.
            } catch (IOException ex) {
                Log.e(TAG, "Registration error " + ex.getMessage());
            }
        }

然后,您必须使用 google oAuth 登录服务将您的服务器注册到该服务,完成后您可以发送消息。当我测试时,我使用 curl 向服务器发送 http post 请求。

从服务器注册:

curl https://www.google.com/accounts/ClientLogin -d Email=theEmailYouWhitelisted -d Passwd=pass****word -d accountType=HOSTED_OR_GOOGLE -d source=Google-cURL-Example -d service=ac2dm

您将收到一条带有身份验证 ID 的消息。然后,您使用它来发送消息。要发送消息,请使用:

curl --header "Authorization: GoogleLogin auth=**authFromRegistrationAbove**" "https://android.apis.google.com/c2dm/send" -d registration_id=**phoneRegistrationId(reciever)** -d "data.message=StringToPass" -d collapse_key=something -k

下载 curl 从: CURL

希望这可以帮助。

于 2010-10-25T13:26:31.187 回答
1

关于 c2dm 客户端/服务器注册和发送/接收消息的教程。

http://android.arnodenhond.com/tutorials/cloud-to-device-messaging

  • 意图请求注册 ID
  • 接收者接收注册ID
  • 请求注册服务器的 url
  • 请求发送消息的 url
  • 广播接收者接收消息
于 2011-06-23T20:49:56.287 回答