1

這可能是一個奇怪的問題,但通常當我註冊一個接收器作爲一個動作(例如短信接收)時,我指定一個優先級值儘可能高的給我的應用程序。這樣我的應用程序就可以在其他應用程序之前獲得sms,並且我可以在他們面前做任何我想做的事情(比如放棄廣播)。谷歌雲消息上的應用選擇

我沒有給予優先權,或沒有做任何特別的GCM。我添加了對GCM Receive的使用權限,並在清單文件中註冊了一個接收者。

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
. 
. 
. 
<receiver 
    android:name="com.google.android.gcm.GCMBroadcastReceiver" 
    android:permission="com.google.android.c2dm.permission.SEND" > 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
    </intent-filter> 
</receiver> 

因此,假設另一個應用程序也將這些添加到它的清單文件。 GCM如何調用我的廣播接收器而不是其他應用程序的廣播接收器?

回答

2

GCM Client Manifest Setup

[您必須添加]一個applicationPackage + ".permission.C2D_MESSAGE"權限,以防止其他Android應用程序註冊和收到Android應用程序的消息。權限名稱必須與此模式完全匹配,否則Android應用程序將不會收到消息。

即,

<permission android:name="com.example.app.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="com.example.app.permission.C2D_MESSAGE" /> 

<application ...> 
    <receiver 
     android:name=".GcmBroadcastReceiver" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <category android:name="com.example.app" /> 
     </intent-filter> 
    </receiver> 
    <service android:name=".GcmIntentService" /> 
</application> 

其中com.example.app需要與你的包的名稱來代替。

+0

是否以某種方式添加此權限與生成的註冊ID(後來的服務器用於發送消息)有關? – inankupeli