私はこれに到達しないことを望んでいましたが、私は過去2日間、かなり単純に見えるもので頭を悩ませてきました。googleとvogellaのチュートリアルに従って、C2DMアプリケーションクライアント+サーバーをすでに実装しました。
私は私の問題を簡単に説明しようとします:
- クライアントアプリケーションがregistrationIdを正常に受信しました。
- サーバーが認証トークンを正常に受信しました。
- サーバーは、認証トークンとデバイスのregistrationIdを使用してメッセージを送信します。
- サーバーからクライアントにメッセージを送信すると、成功したメッセージ応答コードが表示されます(たとえば、id = 0:1335303367614556%fd55792500000030応答コード:200、C2DMに関するGoogleのドキュメントによると成功したメッセージである必要があります)。
したがって、おそらく私の問題はメッセージの受信者にあると思います。メッセージはサードパーティのサーバーからC2DMサーバーに送信されますが、そこからアプリケーションに到達できないためです。
StackOverflowの関連トピックで、デバイスのポートに問題がある可能性があることを読みましたが、現在、アプリケーションの登録とメッセージの受信の両方に同じレシーバーを使用しており、登録部分は毎回機能します。
これが私の受信機です:
public class C2DRegistrationReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null){
if (action.equals("com.google.android.c2dm.intent.REGISTRATION")){
// do something
}
else if (action.equals("com.google.android.c2dm.intent.RECEIVE")){
// do something else
}
}
}
}
私のマニフェストファイル:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ro.raullepsa.coder"
android:versionCode="1"
android:versionName="1.0" >
<!-- SDK min version -->
<uses-sdk android:minSdkVersion="8" />
<!-- Only this application can receive the messages and registration result -->
<permission android:name="ro.raullepsa.coder.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="ro.raullepsa.coder.permission.C2D_MESSAGE" />
<!-- This app has permission to register and receive messages from Google's c2dm -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- Permission to use internet -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<!-- Activities -->
<activity
android:name="ro.raullepsa.coder.activity.MainActivity"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ro.raullepsa.coder.activity.RegistrationResultActivity" />
<activity android:name="ro.raullepsa.coder.activity.MessageReceivedActivity" />
<receiver
android:name="ro.raullepsa.coder.util.c2d.C2DRegistrationReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<!-- Receive messages -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="ro.raullepsa.coder" />
</intent-filter>
<!-- Receive the registration id -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="ro.raullepsa.coder" />
</intent-filter>
</receiver>
</application>
</manifest>
エラーは発生しません。アプリケーションの再インストール、再登録、2つの別々のレシーバーでの試行、C2DMから実行されているすべてのサービスを手動で強制停止して再インストールしましたが、それでも何も起こりません。
デバッグモードでレシーバーの最初の行を待機しようとしましたが、登録時にそこに到達しますが、サーバーからメッセージを送信した後は応答しません。
私はちょっと立ち往生しているので、助けていただければ幸いです。私のアプリケーションは基本的にLarsVogelのチュートリアルですが、必要に応じてさらに多くのコードを提供できます。私は何が欠けていますか?