2011-02-25 2 views
35

私は自分のアプリケーションにC2DMを実装しようとしていますが、マニフェストの書き方に関してはdocumentationが少し混乱しています。C2DM:C2D_MESSAGEパーミッションの使用方法は?

マニフェストコード例はこれを含んでいます。次のように

<!-- Only this application can receive the messages and registration result --> 
<permission android:name="com.example.myapp.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.myapp.permission.C2D_MESSAGE" /> 

これは説明する:

applicationPackage +」.permission.C2D_MESSAGEは、アプリケーションのメッセージを登録し、受信することから、他のアプリケーションを防止

しかし、これはどのくらい正確に機能しますか?私が理解しているように、これは許可を宣言してから私のアプリの許可。しかし、その許可はどこで強制されますか?

登録のために与えられたコードは次のとおりです。

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER"); 
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate 
registrationIntent.putExtra("sender", emailOfSender); 
startService(registrationIntent); 

どうregistrationIntentを受けるサービスをチェックするためにどのような権限を知ることができますか?私が理解しているように(私がここで間違っていれば私を修正する)、許可を宣言するとき、私は自分の名前空間内で任意の許可名を選択することができた。 .com.example.myapp.permission.WHATEVER。

またはC2D_MESSAGE私は使用する必要があるいくつかの魔法の定数ですか?


また、ドキュメントは、私がcom.google.android.c2dm.intent.C2D_MESSAGEcom.google.android.c2dm.intent.REGISTRATIONインテントのための受信機を実装する必要があることを述べています。しかし、コード例では、受信者のフィルタには.intent.RECEIVE.intent.REGISTRATIONインテントのみが含まれています。 C2D_MESSAGEはどこに行きましたか?そして、それは私の上記の質問と一緒にやるべきことがありますか?

私はこれが何か明白ではないことを望みますが、私はそれを得ていません...助けてください。

答えて

23

マニフェストの例と一致しないため、要約の一番上に必要なレシーバはドキュメントに間違いがあるようです。

"com.google.android.c2dm.intent.C2D_MESSAGEとcom.google.android.c2dm.intent.REGISTRATIONための受信機。")

私は、彼らが使用して動作するように与える例を得ました特定のアプリケーションのパッケージ名に合わせてマニフェストエントリの例を調整するだけです。

アンドロイドでC2DMコードは(潜在的な受信機はにブロードキャストを送信することが見えたときに、むしろ、または)を放送し、それが探し送信します

はテントのための放送受信機を探す:コム.permission.C2D_MESSAGE

アンドロイドC2DMコードによって、アプリケーションに送信され

すべてC2DMメッセージが探してされます。アクセス許可を持って.google.android.c2dm.intent.REGISTRATION その特定の許可。これはアプリケーション固有のものであり、単にその構造体(アプリケーションのパッケージ+ ")に存在する必要があります。permission.C2D_MESSAGE「)登録要求が権限に使用するパッケージ名を取得する方法について

、あなたが最初に登録したときにそれが処理されます。 『アプリ』の余分な - ドキュメントから:

」アプリはPendingIntentで設定したアプリケーションのIDは、登録サービスは、アプリケーション情報を抽出することができるようにすることです「問題の

行:。

registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); // boilerplate 
+0

C2D_MESSAGE権限を宣言して要求しないとどうなりますか? c2dmのブロードキャストを受信できなくなるのですか?これは、私の最初のコードブロックのコメントが実際に "c2dmブロードキャスト_at all_を受信できることを確認"する必要があることを意味します。 – user634618

+0

この許可を宣言しないと、ドキュメントから判断すると、BroadcastReceiversを探すC2DMの部分意図を処理して(そして許可を持っている)試みるBroadcastReceiversが見つからないので、ブロードキャストはどこにも行きません。 私はそれを試していませんが、試してみるのはとても簡単でしょう。最初にドキュメントの例に従って、まずすべてがうまく動作していることを確認します。 – mbafford

+1

ありがとう、私は再度BroadcastReceiverのためのドキュメントを読んで、今それを理解する。私が最初にそれを読むときに気づいていなかったのは、放送意図を明示的に許可する必要があるということです。 – user634618

関連する問題