目前使用c2dm构建一个Android应用程序,推送来自构建在app引擎上的网站的消息。我已经遵循了许多教程,到目前为止......
但是,我的设备只是坐在那里,没有收到任何消息。我花了最后一周将项目拆开并从头开始重建多次,并且它总是回到设备而根本没有收到有效负载消息。我不知道我哪里出错了。
我的帐户可能有问题吗?无论如何,我是否要检查C2DM服务器上的待处理消息?
代码: Android Manifest
<permission android:name="skaught.wingman.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="skaught.wingman.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name="C2DReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<!-- Receive registration ids -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="skaught.wingman" />
</intent-filter>
<!-- Receive actual messages -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="skaught.wingman" />
</intent-filter>
</receiver>
....
向C2DM服务器发送推送
payload = {
"data.payload" : "Please Work!",
"registration_id": regId,
"collapse_key": hash(email),
}
encodedPayload = urllib.urlencode(payload)
url = "http://android.clients.google.com/c2dm/send"
#Make a POST request to C2DM server
result = urlfetch.fetch(url=url,
payload=encodedPayload,
method=urlfetch.POST,
headers={ 'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'GoogleLogin auth=' + authToken}
)
在Android上接收C2DM消息
public class C2DReceiver extends BroadcastReceiver {
@Override
public final void onReceive(Context context, Intent intent) {
Log.d(Constants.TAG, "Received a Message");
if (Constants.RECEIVED_REGISTRATION_ID_FROM_GOOGLE.equals(intent.getAction())) {
Log.d(Constants.TAG, "Received a registration ID from Google.");
handleRegistration(context, intent);
} else if (Constants.RECEIVED_C2DM_MESSAGE_FROM_GOOGLE.equals(intent.getAction())) {
//I'm NEVER reached!
Log.d(Constants.TAG, "Received a C2DM message from Google.");
}
}
答案 0 :(得分:0)
请确保您用于获取手机上的注册ID的电子邮件ID以及用于获取身份验证令牌的电子邮件ID是相同。
还要确保您的有效负载不会超过1024个字符。有效负载有1024个字符限制。
您还必须确保在批准时使用email-id注册的包名称是相同的。我假设你已经这样做了。
答案 1 :(得分:0)
首先,您必须从C2DM收到您的设备的注册ID
在您的应用服务器中使用此设备register-id并获取身份验证令牌
使用此身份验证和设备注册ID发送有效负载
但是,由于您没有按顺序执行此操作,因此您的设备注册ID将再次更改,但您使用的是旧ID。因此,您无法在设备中收到消息 正如你这样执行。
按照第4章中提供的示例应用程序执行:
http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html