2013-10-11 12 views
6

Ich habe eine Anwendung, in der ich Google Cloud Messaging Benachrichtigungen implementiere, aber in einem bestimmten Gerät kommen die Nachrichten nicht an. Dieses Gerät erfüllt die Mindestanforderungen für die Verwendung von GCM (Android Version 2.2, Play Store installiert und ein Google-Konto angemeldet). Im Protokoll sehe ich, dass das Gerät die Registrierungs-ID empfängt und an das Back-Office sendet, wo ich eine Liste von registrierten Geräten habe.Spezifisches Gerät erhält keine Google Cloud Messaging-Benachrichtigungen

Meine Frage ist: Muss ich zusätzliche Konfigurationen vornehmen, damit das Gerät diese Benachrichtigungen erhält?

Hier ist das Manifest

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="br.com.testegcm" 
    android:versionCode="1" 
    android:versionName="1" > 

    <uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="18" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

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

    <application 
     android:name="TesteGCM" 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" >   

     <receiver 
      android:name="br.com.testegcm.GcmBroadcastReceiver" 
      android:exported="true" 
      android:enabled="true" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="br.com.testegcm" /> 
      </intent-filter> 
     </receiver> 

     <service android:name="br.com.testegcm.GcmIntentService" /> 

     <activity 
      android:name="br.com.testegcm.Home" 
      android:screenOrientation="portrait" 
      android:label="@string/app_name" 
      android:theme="@style/notitle" > 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </activity> 
</application> 
</manifest> 
+1

Bitte geben Sie Ihren Code an (Manifest, Broadcast-Empfänger, etc ...). Einige Fehler im Manifest können dazu führen, dass die Nachrichten nur bei älteren Android-Versionen nicht empfangen werden. – Eran

+0

@Eran Ich habe das Manifest –

Antwort

0

Keine abgesehen von Android-Version 2.2, Play Store App installiert und ein Google-Konto angemeldet keine andere Konfiguration benötigt wird, jetzt gibt es nur zwei Fälle

links
1) Either there is some ambiguity in your code. 
2) or may be it is a device specific issue. 
3

ändern diese:

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

zu:

<permission android:name="br.com.testegcm.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 
<uses-permission android:name="br.com.testegcm.permission.C2D_MESSAGE" /> 
+0

Dies funktioniert nicht –

0

hatte ich die gleichen problem.My Code auf nexus4 (Kitkat) funktionieren würde, aber scheitern würde mir eine Benachrichtigung von der appln Server erhalten (über GCM-Server) .Für Versionen weniger als 4.0.4 sollten Sie sicherstellen, dass Ihr Google-Konto auf Ihrem Gerät eingerichtet ist, damit gcm funktioniert. Ich hatte Google-Konto auf meinem Telefon, aber der Fehler, den ich machte, war, dass meine Konto- und Synchronisierungseinstellungen in meinem Galaxie-As 'Off' waren. Als ich es einschaltete und meinen Code ausführte, erhielt ich die Benachrichtigung.

+1

In meinem Fall ist die Sync ON, so ist das Problem nicht das Gleiche. –

1

das gleiche Problem hinzufügen und i i schließlich erkennen, dass ich die Rundfunkempfänger Paketnamen von com.example.gcm meinen Paketnamen im Manifest ändern müssen,:

<!-- Push notifcations--> 
     <receiver 
       android:name=".BroadcastRecivers.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.gcm"/> 
      </intent-filter> 
     </receiver> 

Um

<!-- Push notifcations--> 
     <receiver 
       android:name=".BroadcastRecivers.GcmBroadcastReceiver" 
       android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE"/> 
       <category android:name="MY PACKAGE NAME"/> 
      </intent-filter> 
     </receiver> 
+0

Danke! Interessanterweise, einfache und offensichtliche Lösung. Arbeitet für mich in Geräten> = API 19 w/top, aber hat nicht mit API 15 funktioniert, bis ich die untere Änderung vorgenommen habe. Anscheinend war letzteres strenger. Ich hatte Beispielcode faul kopiert und nicht realisiert, dass ich einen Beispielpkg-Namen verwendete. – sobelito

0

Bitte überprüfen Sie die folgende Lösung. wenn es immer noch nicht funktioniert, lass es mich wissen. Liste Erhalten und REGISTRATION Intent in zwei verschiedenen Absicht Filter

<receiver 
      android:name=“<.GCM BroadcastReceiver Name>“ // Name of your BroadcastReceiver, define in code.                           
      android:exported="true" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name=“<Package Name>" /> 
      </intent-filter> 
       <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name=“<Package Name>" /> 
      </intent-filter> 
     </receiver> 
     <service android:name=“<.GCM IntentService Name>" /> // Name of your IntentService, define in code. 
<meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

Liste Erhalten und REGISTRATION Intent in zwei verschiedenen Absicht Filter wie oben gezeigt sonst wird es nicht für einige Geräte arbeiten (Ex. HTC).

Verwandte Themen