2016-07-11 5 views
-2

das ist nicht das erste Mal, ich frage mich, wie GCM/FCM funktioniert, wenn die Anwendung im Hintergrund ist.Funktioniert FCM-Messaging gut für nicht veröffentlichte Apps?

Und jetzt bin ich meine Anwendung ändern Ich merke, dass es data Nachrichten nicht empfängt, wenn die Anwendung im Hintergrund ist, während die gleiche Nachricht von der Anwendung im Vordergrund gut empfangen wird.

Wenn ich das veröffentlichte von Google Play installiere, funktioniert es in allen Fällen gut.

Wenn ich das Projekt der veröffentlichten Anwendung zurückbekomme und es neu erstelle, werden FCM-Nachrichten nicht empfangen, wenn sich die App im Hintergrund befindet. Das ist ein Albtraum.

Also ich frage mich, ob FCM vollständig für unveröffentlichte Anwendung funktioniert!?!

Meine Botschaft ist (von Advanced REST-Client getestet):

{ 
    "registration_ids": [ 
    "feWpp3aQ8sQ:A...dclQ1hSttsf", 
    "feDmzDRi-gw:A...O9ur7oXi", 
    "f7dbqek_rPo:APA91bEu...a1rSje0bNmPq8" 
    ], 
    "data": { 
    "id": 19, 
    "title": "Title test", 
    "msg": "Text of the test", 
    "code": 2, 
    "infosUrl": "www.myexample.com", 
    "eventLocation": "Nowhere", 
    "latitude": 47.90022515672, 
    "longitude": 15.0196307059377, 
    "startDate": "2016/05/14 20:00", 
    "endDate": "2016/05/14 22:00", 
    "publishEndDate": "", 
    "image": "" 
    }, 
    "delay_while_idle": false, 
    "priority": "high", 
    "content_available": true 
} 

Mein Manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.my.example" 
    android:installLocation="auto" 
    android:versionCode="52" 
    android:versionName="@string/app_version"> 

    <application 
     android:allowBackup="true" 
     android:hardwareAccelerated="false" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:logo="@mipmap/ic_launcher"> 

     <activity 
      android:name=".MainActivity" 
      android:configChanges="keyboardHidden|orientation|screenSize" 
      android:label="@string/app_name"> 

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

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

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

     </activity> 

     <activity 
      android:name=".PreferencesActivity" 
      android:label="@string/label_preferenceScreen"/> 

     <activity 
      android:name=".FragmentPreferences" 
      android:label="@string/label_preferenceScreen"/> 

     <service android:name=".MyFcmListenerService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 

     <service 
      android:name=".MyInstanceIDListenerService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
      </intent-filter> 
     </service> 

     <service 
      android:name=".RegistrationIntentService" 
      android:exported="false" /> 

    </application> 

Mein gradle:

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.android.support:support-v4:24.0.0' 
    compile 'com.android.support:support-annotations:24.0.0' 
    compile 'org.osmdroid:osmdroid-android:[email protected]' 
    compile 'com.google.firebase:firebase-messaging:9.2.0' 
    compile 'com.google.android.gms:play-services-location:9.2.0' 
    compile 'com.google.android.gms:play-services-appindexing:9.2.0' 
    compile 'com.android.support:appcompat-v7:24.0.0' 
} 
apply plugin: 'com.google.gms.google-services' 

Und der Zuhörer:

public class MyFcmListenerService extends FirebaseMessagingService { 

    @Override 
    public void onMessageReceived(RemoteMessage fcmMessage) { 

     Map data = fcmMessage.getData(); 

     int code = Integer.parseInt((String) data.get("code")); 

     switch (code) { 
      case 1: // Event 
       .... 
       break; 


      default: 
       break; 
     } 
    } 
} 

Haben Sie solch ein seltsames Problem erlebt ??

Antwort

0

Es spielt keine Rolle, ob es eine veröffentlichte/unveröffentlichte App ist, um eine Benachrichtigung/Nachricht zu erhalten. Was der fcm Server benötigt, ist eine gültige Registrierungs-ID. Ihre Aktion "MyFcmListenerService" mit der Aktion "com.google.firebase.MESSAGING_EVENT" ist für das Empfangen von Nachrichten zuständig. Das bedeutet, dass Sie diesen Dienst absichtlich registriert haben, um Sie/Ihre App zu benachrichtigen, wenn diese bestimmte Aktion auftritt, sobald Ihre App im Hintergrund ist Benachrichtigung/Nachricht erhalten MyInstanceIDListenerService ist dafür verantwortlich, die Registrierungs-ID für Ihre App zu erhalten. Es gibt kein Problem beim Empfang von Nachrichten mit GCM/FCM, ob Ihre App Vordergrund/Hintergrund ist.

+0

Die Nachricht wird erfolgreich an das Gerät gesendet. Ich merke gerade, dass selbst bei einem zuvor laufenden Projekt (laufende App von Google Play) der Hintergrundempfang nicht mehr funktioniert, sobald das Projekt neu aufgebaut wurde ... Das kann ich jetzt nicht verstehen. und es ist nicht spezifisch für irgendein Gerät. – 2ndGAB

Verwandte Themen