2013-10-11 15 views
6

Mam aplikację, w której realizuję powiadomienia Google Cloud Messaging, ale na określonym urządzeniu wiadomości te nie są dostarczane. To urządzenie ma minimalne wymagania, aby używać GCM (wersja Androida 2.2, zainstalowany Sklep Play i konto Google zalogowane). W dzienniku widzę, że urządzenie otrzymuje identyfikator rejestracji i wysyła go na zaplecze, na którym mam zarejestrowaną listę urządzeń.Określone urządzenie nie odbierające powiadomień w Google Cloud Messaging

Moje pytanie brzmi: Czy muszę wykonać dodatkowe konfiguracje, aby urządzenie otrzymywało te powiadomienia?

Oto 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

Proszę podać swój kod (manifest, nadawca, itp.). Niektóre błędy w manifeście mogą powodować, że wiadomości nie będą odbierane tylko w starszych wersjach Androida. – Eran

+0

@Eir Dołączyłem do manifestu –

Odpowiedz

0

nr oprócz Android w wersji 2.2, Play zainstalowana aplikacja Store i konta Google zalogowany jest potrzebna żadna inna konfiguracja, Teraz są tylko dwa przypadki lewo

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

Zmień to:

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

do:

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

To nie działa –

0

miałem ten sam kod problem.My będzie działać na nexus4 (KitKat), ale nie uda się załatwić mi powiadomienie z serwera appln (przez serwer GCM) .W wersji mniej niż 4.0.4 powinieneś upewnić się, że masz skonfigurowane konto Google na urządzeniu, aby gcm działało. Miałem konto Google na moim telefonie, ale popełniłem błąd, ponieważ moje ustawienia konta i synchronizacji w moim galaxy as były "wyłączone". Kiedy go włączyłem i uruchomiłem swój kod, otrzymałem powiadomienie.

+1

W moim przypadku synchronizacja jest włączona, więc problem nie jest taki sam. –

1

Dodaj ten sam problem, a ja w końcu zdałem sobie sprawę, że muszę zmienić w manifeście, nazwa pakietu transmisji odbiornik z com.example.gcm do mojej nazwy pakietu:

<!-- 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> 

Aby

<!-- 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

Dzięki! Co ciekawe, prosta i oczywista poprawka. Pracował dla mnie na urządzeniach> = API 19 z góry, ale nie działał w/API 15, dopóki nie wprowadziłem dolnej zmiany. Najwyraźniej ten drugi był bardziej surowy. Leniwie skopiowałem przykładowy kod i nie zdałem sobie sprawy, że używam przykładowej nazwy pkg. – sobelito

0

Proszę sprawdzić następujące rozwiązanie. jeśli nadal nie działa, daj mi znać. Dodaj odbierać i REJESTRACJI Intent w dwóch różnych filtrów intencyjny

<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" /> 

Dodaj komputery odbierać i REJESTRACJI Intent w dwóch różnych filtrów intencyjny jak przedstawiono wyżej w przeciwnym razie nie będzie działać na niektórych urządzeniach (np. HTC).

Powiązane problemy