私のデバイスをC2DMに登録しようとしましたが、大きな問題があります。私はいくつかのチュートリアルに従ってきました。これらはすべて非常に似ています。私は問題がC2DMサーバーに送信する登録の意図と関係していると考えています。誰にも何か提案がありますか?Android - C2DM Registration Intentを受信できません
マニフェスト:(私のアプリケーションタグ外)権限:
<receiver
android:name=".C2DMReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<!-- Receive the actual message -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.companyname.parade" />
</intent-filter>
<!-- Receive the registration id -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.companyname.parade" />
</intent-filter>
</receiver>
:
<!-- Used for C2DM -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.companyname.parade.permission.C2D_MESSAGE" />
これは意図登録(私のアプリケーションタグ内)であり、以下に関連するコードであります以下は私のデバイスをC2DMサーバーに登録するために呼び出すものです(登録インテントを自分のregistartionIDとともに返信するC2DMサーバーに接続するサービスを開始します)。 C2DMessagingと呼ばれるファイルにあります。
com.google.android.gsf/com.google.android.gsf.gtalkservice.PushMessagingRegistrar
にはlogcat出力がありません:
public static void register(Context context) {
Intent registrationIntent = new Intent(REQUEST_REGISTRATION_INTENT);
registrationIntent.putExtra(EXTRA_APPLICATION_PENDING_INTENT,
PendingIntent.getBroadcast(context, 0, new Intent(), 0));
registrationIntent.putExtra(EXTRA_SENDER, SENDER_ID);
ComponentName name = context.startService(registrationIntent);
if(name == null){
// FAIL!
Log.d(TAG, "FAIL");
}else{
// SUCCESS
Log.d(TAG, "Success");
}
}
コンポーネント名の情報は以下の通りです。 (C2DMReceiverという名前の)私の受信機は以下の通りです:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (C2DMessaging.INTENT_REGISTRATION_CALLBACK.equals(action)) {
// Registration Intent
Log.w(TAG, "Registration Receiver called");
handleRegistration(context, intent);
} else if (action.equals(C2DMessaging.INTENT_RECEIVED_MESSAGE_CALLBACK)) {
Log.w(TAG, "Message Receiver called");
handleMessage(context, intent);
} else if (action.equals(C2DMessaging.INTENT_C2DM_RETRY)) {
C2DMessaging.register(context);
}
}
これはまったく呼び出されません。
を編集してください:この全部は私の愚かな誤りでした。私は読んでいるチュートリアルで何とかして一歩忘れてしまった。私はこれを私の許可に追加する必要があります:
<permission android:name="com.companyname.parade.permission.C2D_MESSAGE" android:protectionLevel="signature" />
応答のためにMisterSquonkに感謝します。
"受信者(C2dmReceiverという名前)" - これは単に入力ミスですか?それはC2DMReceiver(大文字付き)でなければなりません。私はそれが誤字だと思うが、私がチェックすると思った。 – Squonk
それは実際には、ちょうどタイプミスでした。それを指摘してくれてありがとう。 – ariets
OK、ちょうど私がチェックすると思った。あなたが表示されていない唯一のものは、このようなエントリを持っているということです... ' ' 。 'AndroidManifest.xml'にその設定がありますか? –
Squonk