目前正在構建一個使用c2dm的Android應用,從構建於應用引擎上的網站推送消息。我按照許多教程到目前爲止...設備未收到有效負載消息,但正在接收註冊消息
- 我與C2DM一個帳戶,並得到它認可
- 有我的設備與C2DM服務器註冊(receiveing註冊ID)
- 推此註冊ID連同設備的鏈接電子郵件到我的應用程序正在存儲它。
- 向Google的ClientLogin發送請求,並獲取有效的Auth令牌。
- 使用有效負載,regId和auth令牌向C2DM服務器發送發佈請求。我還收到了來自c2dm服務器的「Ok」狀態代碼(200)。所以我假設它完成了。
但是,我的設備就在那裏,沒有收到任何消息。上個星期我花了很多時間拆分項目並重建它,並且它總是回到設備上,而沒有收到有效負載消息。我不知道我要出錯的地方。
請問我的帳戶有問題嗎?無論如何,我可以檢查C2DM服務器上的掛起消息嗎?代碼
位: Android清單
<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}
)
接收C2DM消息在Android
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.");
}
}