Cordova-plugin-firebase: onNotificationOpen wird nicht ausgelöst, wenn die App geschlossen ist – App-Prozess wird im Hintergrund beendet.

Erstellt am 24. Nov. 2016  ·  46Kommentare  ·  Quelle: arnesson/cordova-plugin-firebase

Hallo,

Ich weiß nicht, ob dieses Standardverhalten oder nicht. Aber wenn die App geschlossen ist (der App-Prozess wird beendet), dann kommt die Push-Benachrichtigung und tippt darauf, die onNotificationOpen wird nicht ausgelöst. Ist dies wie erwartet oder muss daran gearbeitet werden?

messaging

Hilfreichster Kommentar

FirebasePlugin.java

<strong i="6">@Override</strong>
protected void pluginInitialize() {
    final Context context = this.cordova.getActivity().getApplicationContext();
    final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
    this.cordova.getThreadPool().execute(new Runnable() {
        public void run() {
            Log.d(TAG, "Starting Firebase plugin");
            mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
            if(extras != null && extras.size()>1) {
                // FirebasePlugin.sendNotification(extras);
                if (FirebasePlugin.notificationStack == null) {
                    FirebasePlugin.notificationStack = new ArrayList<Bundle>();
                }
                notificationStack.add(extras);

            }
        }
    });
}

Alle 46 Kommentare

ich stehe auch vor dem gleichen problem :(

Verwenden Sie das Cordova-Wiederaufnahmeereignis, um den Rückruf wieder herzustellen. Sehen Sie sich die Cordova-Dokumentation zum Android-Lebenszyklus an: http://cordova.apache.org/docs/en/6.x/guide/platforms/android/index.html#lifecycle -guide

@robertarnesson Würde es Ihnen etwas ausmachen, Ihre Antwort ein wenig näher zu erläutern? Ich bekomme das gleiche Problem auf iOS. Ich kann Benachrichtigungen erhalten, während die App im Vorder- und Hintergrund läuft, aber sobald ich meine App schließe/beende, kann ich keine Benachrichtigungen mehr erhalten.

Ich erhalte Benachrichtigungen sowohl im Hintergrund als auch im Vordergrund (Android 6.0.1) ... Aber eine offene Benachrichtigung löst keine App aus, die Taskleistenbenachrichtigung wird nach dem Tippen gelöscht und Benachrichtigungsdaten gehen verloren. (Dies geschieht auch, wenn die App pausiert). Kann es am Zebrastreifen liegen? Gibt es eine Lösung?

@robertarnesson @Taracque

Ich bin mir nicht sicher, ob das hilft, aber ich hasse es wirklich, wenn Leute Wörter oder Links anstelle ihrer eigenen Codebeispiele verwenden, um zu versuchen, zu helfen.

Dies ist eine grundlegende Interpretation dessen, was ich in meiner index.html habe, und dies funktioniert für iOS und Android, wobei die Nutzlast zur Manipulation an die App geliefert wird.

Ich fand heraus, dass ich mit iOS nur die „deviceready“-Funktion von cordova.js verwenden musste, da diese immer dann ausgelöst wurde, wenn eine Benachrichtigung empfangen wurde, wenn sich die Apps im Vordergrund befanden UND nachdem eine App, die sich im Hintergrund befand, fortgesetzt wurde, sei es durch Antippen von Benachrichtigung oder einfach nur die App öffnen.

Für Android musste ich "Fortsetzen" verwenden, da "Gerät bereit" nur einmal ausgelöst wurde, als die App zum ersten Mal geladen wurde (sinnvoll, nehme ich an).

function onLoad(){

    //fire this with load of the HTML page
    document.addEventListener("deviceready", onDeviceReady, false);

    }

    function onDeviceReady(){

    // this will fire when the app first runs (iOS and Android)
    // iOS will run this after tapping a notification as well but not Android

    // Create the resume as soon as the device is ready.
    document.addEventListener("resume", onResume, false); 

    // add initial cordova-plugin-firebase function calls here
    // e.g TokenRefresh, onNotificationOpen etc

    window.FirebasePlugin.onTokenRefresh(function(token){

    //Do something with the token server-side if it exists

    });

    // get any initial or resume notification (used for iOS)
    var payload = getNotification();

    }

    function getNotification(){

    // get any notification variables for use in your app
    window.FirebasePlugin.onNotificationOpen(function(notification){

    //Check if notification exists then do something with the payload vars
    var str = JSON.stringify(notification);
    console.log(str);

    });

    return str;

    }

    function onResume(){
    //Add plugin functions here after app has resumed from background
    // or after notification is tapped (needed for Android)

    //get resume notification and payload (needed for Android)

    var payload = getNotification();

    }

Hallo Leute, ich glaube, wir verfehlen hier den Punkt. die App selbst nicht einmal im Hintergrund oder Vordergrund. Sie versuchen, die App zu beenden, und die Funktion wird nicht ausgelöst. Wir können sie nicht für die Wiederaufnahme verwenden, da die App nicht angehalten wurde und die App nicht in den Vordergrund wechselt, sondern gestartet wird. Auch wenn das Gerät bereit ist, wird onNotification open nicht ausgelöst.

Ich bin mir nicht sicher, ob ich das verstehe, aber ist das richtig.

1: Ihre App ist vollständig inaktiv
2: Sie erhalten eine native Benachrichtigung für die App
3 Sie klicken auf Benachrichtigung
4 Die App wird geladen
5 onNotificationOpen wird nicht ausgelöst

Ist das richtig?

Für welches Betriebssystem ist das?

Können Sie einen Teil Ihres Codes bereitstellen?

Haben Sie Cordova.js in Ihr Skript aufgenommen?

Sind Sie 100% sicher, dass Sie keine js-Fehler auf der Ladeseite haben?

@device68 Ich würde gerne wissen, ob onNotificationOpen ausgelöst wird, wenn die App anfänglich nicht gestartet wird, wie @nikrhes sagte.
Ich habe sowohl auf Android als auch auf iOS getestet, wobei onNotificationOpen bei Resume und Deviceready aufgerufen wurde. Und nur die Situation, die ich oben erwähnt habe, hat nicht funktioniert. Es gibt auch einige unerwartete Verhaltensweisen in anderen Situationen.
Sie können sich Ausgabe Nr. 137 ansehen, die ich geöffnet habe.

@chanphillip , ich werde morgen früh nachsehen. Ich kann iOS 10 nicht bestätigen, da ich eine ältere Version von XCODE verwende, aber ich werde sehen, was genau auf Android passiert.

Meine App nutzt sowohl den Kaltstart mit Nutzlasten aus Benachrichtigungen als auch aus dem Lebenslauf in erheblichem Umfang, habe jedoch keine Probleme festgestellt.

@device68 alle Situationen funktionieren gut, nur wenn die App inaktiv ist, wird die Funktion überhaupt nicht ausgelöst. Ich bin getestet, fast auf jedem IOS- und Android-Betriebssystem, das ich in die Finger bekommen kann. Funktioniert immer noch nicht.

Soweit ich mich während meiner heutigen Tests in Android erinnere, passiert Folgendes.

1 inaktive App

Wenn ich eine Benachrichtigung erhalte und darauf klicke, wird die App wie erwartet geladen, und jeder Plugin-Code in onDeviceReady erfasst diese Nutzlast.

Kein Code innerhalb von Resume erfasst die Nutzlast.

Alle weiteren Benachrichtigungen, während die App noch aktiv ist und noch nicht minimiert wurde, werden von Funktionen innerhalb von onDeviceReady empfangen.

2 Minimieren Sie die App zum ersten Mal.

Wenn ich die App zum ersten Mal minimiere, stoppt dies bei DeviceReady, da das Decice bereits bereit ist und nun auf den Status „Resume“ wartet.

Wenn ich eine Benachrichtigung erhalte und darauf tippe, öffnet sich die App und der Plugin-Code in Resume erfasst jetzt die Nutzlast.

Alle nachfolgenden Benachrichtigungen werden alle von Resume empfangen.

3 minimierte App (im Allgemeinen)

Wenn meine App zu irgendeinem Zeitpunkt minimiert ist und ich auf eine Benachrichtigung klicke, erfasst Resume dies, ABER wenn ich nicht darauf klicke und stattdessen die App manuell öffne, macht Resume nichts und es wird nirgendwo in meinem Code onNotificationOpen ausgelöst.

Beachten Sie, dass diese Aktivität in iOS 9.3 völlig anders ist

4 Vordergrund-App

Wenn ich nach dem Fortsetzen in der App eine Benachrichtigung erhalte, erfasst Resume die Nutzlast.

5 Tötungs-App

Wenn ich die App beende, beginnen wir bei #1

6 Nutzlasten

Die zwei Unterschiede, die ich bei den Daten gesehen habe, die GCM auf Android sendet, hängen davon ab, ob auf die Benachrichtigung außerhalb der App geklickt oder empfangen wurde, während sie im Vordergrund war.

Google fügt Zeitcode, Absender, Nachrichten-ID usw. hinzu, wenn die Benachrichtigung angetippt wird.

Google entfernt das obige, fügt aber unter allen anderen Umständen nur tap = false hinzu.

Alle Datenvariablen, die Sie senden, sind in allen Fällen vorhanden.

Ich verwende die serverseitige Curl-API, um Nachrichten zwischen Web, Android und iOS zu senden

Letztendlich scheint alles auf Android logisch zu sein, es ist tatsächlich die iOS-Implementierung, die falsch und unlogisch ist.

Alles auf iOS funktioniert mit onDeviceReady und onNotificationOpen wird jedes Mal aufgerufen, wenn eine Benachrichtigung empfangen wird, auch wenn Sie eine App manuell öffnen, nachdem Sie benachrichtigt wurden, auf eine Nachricht geklickt oder eine Benachrichtigung erhalten haben, während die App im Vordergrund ist.

Hoffe das hilft.

Sie müssen jedoch sowohl onDeviceReady als auch Resume verwenden und Versionen von onNotificationOpen unter jedem platzieren, wenn Sie die Nutzlast in allen Situationen erfassen möchten.

@device68 Danke für deine ausführliche Erklärung.
Tatsächlich habe ich es falsch gesagt, ich habe auch onNotificationOpen sowohl in den Lebenslauf des Geräts als auch in den Bereitschaftsmodus eingefügt, aber Anwendungsfall 1 (Klicken auf die Benachrichtigung, wenn die App noch nicht einmal gestartet wurde) hat bei mir nicht funktioniert, während die anderen Anwendungsfälle funktionieren so wie du es beschrieben hast.

Ich gehe davon aus, dass Sie während des Tests kein ionisches Framework verwenden. Ich verwende platform.ready(), aber nach meinem Verständnis sollte es mit deviceready identisch sein.

Könnten Sie doppelt bestätigen, dass onNotificationOpen ausgelöst wird, auch wenn die App auf Ihrer Seite nicht gestartet wird (die App wurde beendet)? Kannst du das auch auf iOS testen? Danke.

@chanphillip kein Problem, ich bin froh, dass ich helfen kann.

Richtig, ich verwende nur das über CLI installierte Raw-Phonegap-Plugin und dann dieses darin installierte Plugin.

Hmm, eigentlich habe ich einige weitere Tests durchgeführt und ein Video von meinem Gerät mit Warnungen an 4 Stellen erstellt.

https://www.youtube.com/watch?v=xrWQH2wE8Fo

Dies scheint zu bestätigen, was Sie sehen. onNotificationOpen wird überhaupt NICHT ausgelöst, wenn auf eine Benachrichtigung getippt wird, die einen Kaltstart der App verursacht. Erst danach werden Benachrichtigungen von der Funktion onNotificationOpen gesammelt.

Die Listener werden wie erwartet ausgelöst, jedoch nicht bei NotificationOpen.

Für mich ist dies kein spezielles Problem für meine App, was wahrscheinlich erklärt, warum ich es bis jetzt nicht gesehen habe.

Ich habe auf Geräten mit Android 4+, 6+ und 7+ getestet, alle mit dem gleichen Ergebnis.

Leider glaube ich nicht, dass ich mit iOS viel helfen kann, ich verwende Virtualbox mit Yosemite und XCODE 7.1 (muss iOS 9.3 SDK enthalten). Ich habe festgestellt, dass Benachrichtigungen ausschließlich mit onDeviceRedy funktionierten und nicht einmal Resume verwenden mussten. Dies galt für Geräte mit iOS 9+, aber unter 10+

Die Endbenutzer haben ihre Telefone jedoch auf 10.2 aktualisiert und die Benachrichtigungen funktionieren nicht mehr. Ich glaube, das liegt an meinem XCODE-Building mit 9.3 SDK, ich muss jetzt einen Mac kaufen :-(

Lass mich wissen, ob das Video hilft.

Ich stehe vor dem gleichen Problem. Die App wird geöffnet, aber sie löst die Funktion nicht aus. Ich habe versucht, das Verhalten auf Ihrem Video zu reproduzieren, und natürlich warte ich auf den Bereitschaftszustand des Geräts. Aber die Methode löst nie aus.

Achtung: bei Auswertung der Funktion über Leuchttischsteckdose funktioniert es. Es funktioniert NUR, wenn ich es in der IDE auswerte. Aber die Funktion wird nie ausgelöst, da die Plugin-Version der Methode "nicht aufgerufen" ist. Warum die Bewertung der Funktion funktioniert?

Hi,
Ich stehe vor dem gleichen Problem, also versuche ich zu verstehen, was im Code vor sich geht.
Für den Kaltstart-Anwendungsfall sagt das Dokument, dass onNewIntent verwendet werden soll.
Der Code für das Plugin sieht gut aus.

    <strong i="9">@Override</strong>
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        FirebasePlugin.sendNotification(intent.getExtras());
    }

Dieser Rückruf muss jedoch aufgerufen werden, wenn die Benachrichtigung eine Absicht festlegt, um mit der Verwendung von click_action in der Nutzlast zu beginnen

{
  "to": "/topics/news",
  "notification": {
    "title": "Click Action Message",
    "text": "Sample message",
    "click_action": "android.intent.action.MAIN"
  }
}

Ich versuche dies zu tun, aber ohne Erfolg, ich bin mir nicht sicher, ob die Klickaktion eingestellt werden muss.
Unabhängig von dem Wert, den ich eingestellt habe, wird die App nicht gestartet

        <activity android:name="MainActivity" >
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

Um das Fehlen von Klickaktionen zu umgehen, könnte es vielleicht nett sein, den zusätzlichen Inhalt während der Plugin-Init zu lesen.
Ich versuche es mit diesem Code und dieses Mal habe ich die Benachrichtigung bekommen.

<strong i="21">@Override</strong>
    protected void pluginInitialize() {
        final Context context = this.cordova.getActivity().getApplicationContext();
        final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
        this.cordova.getThreadPool().execute(new Runnable() {
            public void run() {
                Log.d(TAG, "Starting Firebase plugin");
                mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
                if(extras != null && extras.size()>1) {
                    FirebasePlugin.sendNotification(extras);

                }
            }
        });
    }

Wie auch immer, es sieht aus wie ein schmutziger Hack.

Ok, ich schaffe es, click_action zu verwenden, indem ich die Standardkategorie in der manifest.xml hinzufüge, aber onNewIntent wird nicht aufgerufen.

            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

FirebasePlugin.java

<strong i="6">@Override</strong>
protected void pluginInitialize() {
    final Context context = this.cordova.getActivity().getApplicationContext();
    final Bundle extras = this.cordova.getActivity().getIntent().getExtras();
    this.cordova.getThreadPool().execute(new Runnable() {
        public void run() {
            Log.d(TAG, "Starting Firebase plugin");
            mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
            if(extras != null && extras.size()>1) {
                // FirebasePlugin.sendNotification(extras);
                if (FirebasePlugin.notificationStack == null) {
                    FirebasePlugin.notificationStack = new ArrayList<Bundle>();
                }
                notificationStack.add(extras);

            }
        }
    });
}

Ich hatte das gleiche Problem wie oben beschrieben, hauptsächlich wurde die Benachrichtigungsnutzlast nicht geliefert, als die App durch Tippen auf eine Benachrichtigung gestartet wurde. Der Vorschlag von @ huny0522 scheint das Problem zu beheben. 👍

Interessant, ich brauche das nicht speziell, werde es aber auch versuchen und sehen, ob es für mich funktioniert. Es wäre ideal, wenn die Entwickler dieses Plugins diese Änderung irgendwie implementieren könnten, da es für die meisten Leute, die nach dem Kaltstart einer App eine Benachrichtigungsnutzlast benötigen, ein großes Problem zu sein scheint.

Dieses Problem wurde behoben oder wird in der nächsten Version behoben!?

Der Patch von @huny0522 hat das Problem für mich nicht behoben. onNotificationReceived-Rückruf bei Android-Kaltstart ignoriert. Alle anderen Szenarien verhalten sich wie erwartet.

Die Neuinstallation des Plugins von github löste das Problem für mich, nachdem ich alle vorgeschlagenen Lösungen ausprobiert hatte

Cordova-Plugin hinzufügen https://github.com/arnesson/cordova-plugin-firebase.git --save

Jemand hat das gelöst

Schritt 3, den @device68 geschrieben hat ??

minimierte App (im Allgemeinen)

Wenn meine App zu irgendeinem Zeitpunkt minimiert ist und ich auf eine Benachrichtigung klicke, erfasst Resume dies, ABER wenn ich nicht darauf klicke und stattdessen die App manuell öffne, macht Resume nichts und es wird nirgendwo in meinem Code onNotificationOpen ausgelöst.

Das ist jetzt mein einziges Problem.

Ähnliches Problem hier.

Ich musste diese Zeile aus dem gesendeten Objekt entfernen: "click_action":"YOUR_DATA_HERE".

Jetzt startet die App korrekt, wenn ich die im Hintergrund empfangene Benachrichtigung berühre.

Ich hoffe es hilft.

Ich habe auch die gleichen Probleme mit einer ionic/cordova-App, aber nur auf einem Gerät mit Android 6.0. Bei diesem Gerät wird die Benachrichtigung immer in der Statusleiste ausgelöst, egal ob ich die App im Hintergrund oder im Vordergrund (!) habe, und der Rückruf wird nie ausgelöst, wenn ich die Benachrichtigung öffne, daher bekomme ich keine Nutzlast.
Jedes andere Gerät, das ich getestet habe, war in Ordnung (Android 5, iOS 9 und 10): Im Vordergrund löst es die Rückrufdaten aus und ich reagiere darauf, und im Hintergrund erhält die Benachrichtigung normalerweise in der Statusleiste, wie in den Dokumenten beschrieben.

@abhishek-kollipara Das besprochene Problem ist nicht, wie die Nutzlast im Vordergrund-/Hintergrundzustand erfasst wird, sondern wenn die App durch Tippen auf eine Benachrichtigung und Abrufen der Benachrichtigungsnutzlast kalt gestartet wird. Dies ist nicht das Problem, wie die Nutzlast gebildet wird, insbesondere wenn sie in der Dokumentation eines anderen Plugins und nicht in diesem beschrieben wird.

Ich hatte meinen ersten Erfolg damit, die Nutzlast mit einem Kaltstart zu fangen, seit ich vor zwei Tagen angefangen habe, sie zu jagen. Holen Sie sich das ionische native Plugin 'Web Intent'. Installieren Sie es wie dokumentiert und verwenden Sie die integrierte Funktion getIntent() beim Booten. Wenn die App durch eine Benachrichtigung gestartet wird, befinden sich die Benachrichtigungsdaten irgendwo im zurückgegebenen Objekt.

@heidji Das funktioniert auf IOS?

Zu meinem Fall:

Android:
-Kaltstart: OnNotificationOpen starten
-Minimierte App: Starten Sie OnNotificationOpen
-Vordergrund-App: Starten Sie OnNotificationOpen

iOS:
-Kaltstart: NICHT OnNotificationOpen starten
-Minimierte App: Starten Sie OnNotificationOpen
-Vordergrund-App: Starten Sie OnNotificationOpen

Danke für die Hilfe

@Hanzofm Ich weiß nicht, ob es unter iOS funktioniert, um ehrlich zu sein. Versuchen Sie einfach, das Web Intent-Plugin zu verwenden und seine Ausgabe beim Booten in der Konsole zu protokollieren.

Ich habe das gleiche Verhalten in iOS, das von @Hanzofm beschrieben wird

Ich habe das gleiche Verhalten in iOS. Die onNotificationOpen wird beim Kaltstart der iOS-App beim Klicken auf die Benachrichtigung nicht aufgerufen. Mit der Plugin-Version 0.1.25.

Aktualisieren:
Ich habe die "cordova-plugin-local-notifications" auch mit dem Firebase-Plugin verwendet und das hat das Problem verursacht. Als ich das Plugin "cordova-plugin-local-notifications" entfernte, funktionierte es einwandfrei.

Ich habe auch Probleme, noNotificationOpen zu erhalten, um bei Kaltstarts (iOS) zu feuern. Gibt es da draußen eine Lösung?

Danke

In meinem Fall wurde das Entfernen des Plugins für lokale Benachrichtigungen gelöst. Es besteht eine Inkompatibilität mit diesem Plugin und den Push-Benachrichtigungs-Plugins

Leider habe ich das Plugin nicht :)

Soll das an sein?

skjermbilde 2018-04-27 kl 09 22 50

Schließung wegen Aufräumarbeiten. Bitte testen Sie mit der neuesten Version und öffnen Sie erneut, wenn das Problem weiterhin besteht.

@heidji Nehmen wir an, wir haben das Problem mit Ihrer Methode gelöst. Haben Sie Informationen darüber, wie Sie die Benachrichtigungsdaten in der folgenden Situation abrufen können?

Die App ist komplett geschlossen. Benutzer erhält Push-Benachrichtigung. Der Benutzer klickt nicht auf die Benachrichtigung, sondern entfernt sie stattdessen aus der Benachrichtigungsleiste. Der Benutzer öffnet die App später und geht zur Benachrichtigungsseite und sieht nichts. Weil Benutzer weder die Benachrichtigung im Vordergrund erhalten noch darauf geklickt haben, um die App zu öffnen. Aber wir müssen immer noch wissen, dass diese Benachrichtigung vorhanden ist, um sie dem Benutzer anzuzeigen. Wie macht man das in ionic3?

@akildemir In Ionic gibt es dafür keine Möglichkeit. Sie müssen Benachrichtigungen auf Ihrem eigenen Server protokollieren und sie abrufen, wenn der Benutzer die App öffnet, wie es normalerweise jeder tun würde.

@heidji wie soll ich die Benachrichtigungen auf meinem Server protokollieren, um sie abzurufen, wenn ich nicht weiß, dass diese Benachrichtigung existiert?
Gibt es eine Möglichkeit, dass Firebase die Benachrichtigungen auch mit dem Gerät an meinen Server sendet, oder Meinten Sie, Firebase nicht zu verwenden, sondern Ihren eigenen Server für Benachrichtigungen zu verwenden?

@akildemir Ich meine, wenn Sie eine Push-Benachrichtigung ERSTELLEN, registrieren Sie ihre Existenz auch woanders, z. B. auf Ihrem eigenen Server oder einem beliebigen Server, den Sie für Ihr Projekt verwenden. Ich denke, Firebase bietet diese Dienste auch an.
Ich weiß nicht, wie Sie diese Benachrichtigungen erstellen, aber in meinem Projekt, wenn etwas auf meinem PHP-Server passiert, zum Beispiel jemand Ihnen eine Nachricht gesendet hat, kontaktiere ich Firebase, um eine Benachrichtigung zu senden, und ich speichere dieses Ereignis AUCH mit einem "is_read = 0". Wenn der Benutzer also nie auf die Benachrichtigung klickt, kann er sie auf der Website abrufen, oder die App verwendet Ihren eigenen Dienst, um diese Benachrichtigungen aufzurufen, oder was auch immer, nur Standard-Entwicklerkram.

@heidji Ich habe keine Website für meine App, aber ja, was du gesagt hast, ist ziemlich logisch. Ich kann die Benachrichtigung gleichzeitig auf meinem Server speichern und später abrufen. Danke! und ja, ich kann als Neuling in Sachen mobiler Entwicklung gezählt werden. Darf ich auch noch was fragen? Wie kann ich dieselbe Benachrichtigung über Firebase auf mehreren Geräten registrieren? Sie können es sich wie einen Gruppenchat vorstellen. Wenn jemand etwas in den Gruppenchat eingibt, bekommt es jeder in der Gruppe. Ich verwende dieses Format, um eine Benachrichtigung zu registrieren:

Körper lassen = {
"Benachrichtigung":{
"Titel": "Titel" , "body":"body" ,
},
"Daten":{
"param1": "wert1"
},
"an": DeviceId ,
"Priorität": "hoch",
"restricted_package_name":""
}

  let options = new HttpHeaders().set('Content-Type','application/json');
  this.http.post("https://fcm.googleapis.com/fcm/send",body,{
    headers: options.set('Authorization', 'key=),
  })

hier, wenn Sie die deviceId an den Abschnitt "to" übergeben, der an das Gerät gesendet wird. aber kann ich hier mehrere Geräte-IDs übergeben?

@nikrhes Sie können es in den Metadaten überprüfen:
window.FirebasePlugin.onNotificationOpen().subscribe((data) => {
if (data.tap) {
// Benutzer tippt auf die Benachrichtigung
} anders {
// App läuft im Vordergrund
}
});

Ich bin mir nicht sicher, ob dies jemals gelöst wurde, aber ich suche seit Monaten in den verschiedenen Threads darüber nach der Antwort. Um es klar zu sagen, das Problem ist, dass onNotification nicht speziell im Fall von iOS ausgelöst wird, wo die App vollständig geschlossen/ausgeschaltet/beendet ist. Die Benachrichtigung kommt herein, die App wird kalt gestartet, aber die Funktion wird nicht ausgelöst und die Nutzlast wird nicht übermittelt.

@heidji - Ihre Umgehungslösung, die Push-Ereignisse auf dem Server zu speichern und zu prüfen, ob sie gelesen wurden, ist sinnvoll. In unserer App gibt es jedoch Szenarien, bei denen dies nicht funktioniert (d. h. wir müssen feststellen, ob die Benachrichtigung ausgelöst wird, um darauf zu basieren, ob der Benutzer tatsächlich darauf geklickt hat, und nicht, ob er sie gelesen hat.)

Aber die Hauptsache ist, wie so viele andere gesagt haben, dass dies ein kritisches Verhalten zu sein scheint, für das es eine Lösung geben muss?

@wwwguy meine Lösung ist keine Problemumgehung. es ist gängige Praxis, die jeder verwendet, ob groß oder klein.
Sie können sich nicht auf Benachrichtigungspressen verlassen, dies sind keine garantierten Ereignisse. Ich meine, wenn ich auf meinem Xiaomi-Telefon auf eine Facebook-Benachrichtigung drücke, öffnet sich die App manchmal nicht einmal.

Ja ich verstehe. Wir haben Dutzende von Apps für viele verschiedene Kunden bereitgestellt. Wir verwenden auch in mehreren unserer Apps die Praxis, Benachrichtigungen „liest“ auf dem Server zu verfolgen. Aber es gibt auch andere Fälle zu berücksichtigen – dh Benachrichtigungen, die mehr als nur einfache Benachrichtigungen sind, sondern Nutzdaten enthalten, die dann bestimmte Funktionen innerhalb der App steuern, wenn sie angeklickt werden. Facebook ist Mist. Jeder kennt das. Aber FB-Benachrichtigungen sind auch genau das, einfache Benachrichtigungen (die einfach in einer Archivliste in der App angezeigt werden). Sie sind nicht funktioneller Natur. Das heißt, es gibt keine bestimmten Arten von FB-Benachrichtigungen, die beim Anklicken die App öffnen und Sie zu einem bestimmten Ort leiten müssen.

Wie auch immer ... Ich habe nicht unbedingt gepostet, um in eine große philosophische Diskussion einzusteigen (eigentlich habe ich @heidji nur für die gute Idee zugenickt, da dies das Problem in vielen Fällen lösen würde). Aber sicherlich sind wir uns alle einig, dass dies:

Offene Android-App = FUNKTIONIERT
iOS Open App = FUNKTIONIERT
Android-Hintergrund-App = FUNKTIONIERT
iOS-Hintergrund-App = FUNKTIONIERT
Android-Kaltstart von getöteter App = FUNKTIONIERT
iOS-Kaltstart von abgebrochener App = FUNKTIONIERT NICHT

...ist nicht das beabsichtigte Design des Plugins. Es handelt sich also entweder um einen Fehler, den der Entwickler nicht angesprochen hat (möglicherweise aufgrund der Verwirrung in all diesen verschiedenen Threads und der Fehldiagnose verschiedener Personen), oder um etwas anderes wie im PUSH-Body übergebene Variablen oder in xCode kompilierte Funktionen dieses Verhalten verursacht.

Bugfix für das Plugin durch den Entwickler beiseite ... konnte jemand einen manuellen Code-Fix dafür isolieren?

Ehrlich gesagt funktioniert die Benachrichtigung vom Kaltstart auf iOS bei mir zu 100%. Ich habe das Webintent-Plugin nur für Android verwendet, weil onNotificationOpen dort nicht funktioniert hat und Webintent auf iOS nicht existiert.
Wenn Sie irgendwelche Einzelheiten zu meinem Setup benötigen, lassen Sie es mich wissen

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen