Ionic/Cordova app nicht empfängt push-Benachrichtigung im hintergrund
Meiner Android app keine push-Benachrichtigungen in den hintergrund und es sollte nach der Dokumentation.
Android-Anwendung auf einem Android-Gerät muss nicht ausgeführt werden
um Nachrichten zu empfangen. Das system aufwecken des Android Anwendung
über Intent-broadcast, wenn die Nachricht eintrifft, solange der
Anwendung eingerichtet ist, mit der richtigen broadcast-receiver und
die Berechtigungen.
Versuchen, verschiedene Meldungen vor, dass es tut, erhält die push-Benachrichtigungen, während es geschlossen ist, wenn und nur wenn die Benachrichtigungen enthält das Attribut "Nachricht", wenn es nicht nur verwirft Sie. (Push-Benachrichtigungen werden nur JSON-Objekte).
Meine Benachrichtigungen enthalten alle Arten von Parametern, einschließlich "alert", "id" und "Titel", sondern nur "Meldung" macht Android-aufwachen die app.
Beispiel die Benachrichtigung, dass nicht funktioniert:
{ event: 'message',
from: '947957531940',
collapse_key: 'do_not_collapse',
foreground: true,
payload:
{ alert: 'Mensaje de Prueba',
title: 'Titulo Mensaje de Prueba' } }
Beispiel die Benachrichtigung, dass funktioniert:
{ event: 'message',
from: '947957531940',
message: 'Contenido del mensaje de prueba.',
collapse_key: 'do_not_collapse',
foreground: true,
payload:
{ alert: 'Mensaje de Prueba',
title: 'Titulo Mensaje de Prueba',
message: 'Contenido del mensaje de prueba.' } }
Ist dies ein Android-standard von design oder mache ich etwas falsch in meiner app?
Meine app wurde entwickelt, mit Ionic mit Cordova.
PD: Entschuldigen Sie mein Englisch.
EDIT:
Dies ist die Android-push code innerhalb der .run-in-Modul app.js als ng-cordova Anweisungen angeben:
if (ionic.Platform.isAndroid()){
var androidConfig = {
"senderID": "94*************",
"ecb": "window.casosPush"
};
try{
var pushNotification = window.plugins.pushNotification;
} catch (ex){
}
//Llamada en caso de exito
var successfn = function(result){
//alert("Success: " + result);
};
//Llamada en caso de error
var errorfn = function(result){
window.alert("Error: " + result);
};
//Llamada de casos de notificacion push
window.casosPush = function(notification){
switch (notification.event){
case 'registered':
if (notification.regid.length > 0){
$rootScope.data.token = notification.regid;
//alert('registration ID = ' + notification.regid);
}
break;
case 'message':
$rootScope.mensajes.unshift(notification.payload);
$localstorage.setArray('mensajes', $rootScope.mensajes);
alert(JSON.stringify(notification));
break;
case 'error':
alert('GCM error = ' + notification.msg);
break;
default:
alert('An unknown GCM event has occurred');
break;
}
};
try{
//Llamada de registro con la plataforma GCM
pushNotification.register(successfn,errorfn,androidConfig);
} catch(notification){
}
}
- was ist Ihre Bedeutung "in der Nähe"? "force close" in der Einstellung? Wenn ja, dann wird es nie bekommen schieben später nach, das zu tun.
- Nein, nicht mit Gewalt geschlossen, nur nicht aktiv, wird im hintergrund derzeit nicht aktiv auf dem Bildschirm. Ich weiß sehr gut, die push-Benachrichtigungen nicht'twork wenn die app force closed.
- Können Sie mir zeigen, Ihren code?
- ist die standar-code von ng-cordova Beispiel, ich werde zu aktualisieren, ist die Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nachdem Sie alle Fragen auf stackoverflow mit Cordova/Phonegap Push-Plugin fand ich de Quelle des Problems. Geschrieben wird in der source-code des plugins, und das sollte nicht sein.
War das problem, dass das plugin source code, benötigt der push-Benachrichtigung zu haben "Nachricht" - Feld, um die zum auslösen einer Benachrichtigung, wenn auf den hintergrund. Es ist der angegebene in der GCMIntentService.java Datei.
Den hilfreichsten Beiträge sind in diesem Antwort und diese Problem in das plugin-repository. So, da habe ich keine macht über die push-server Aktion, die ich nicht angegeben habe, eine "Nachricht" - Feld in der push-Benachrichtigungen, ich hatte keine alternative aber, zu schreiben, die Quell-code.
Also schrieb ich te code wie folgt:
Diese Weise das plugin löst eine lokale Benachrichtigung, wenn es erhält eine push-Benachrichtigungen mit dem Feld "Alarm" statt "message".
Dann änderte ich den code für die lokale Benachrichtigung selbst:
Nun die Benachrichtigung in der notification-bar zeigt zunächst das Feld "alert" anstelle von "Titel" und zweitens eine vordefinierte Nachricht weiter, statt das Feld "Nachricht" das gibt es nicht in meiner push-Benachrichtigungen.
Dann habe ich nur den code neu kompilieren mit:
Also Kinder, das ist, was passiert, wenn man ein plugin schreiben, sondern für alle, die Sie nicht berücksichtigen generische Fälle und Sie nicht aufschreibst, gut. Das plugin ist nur sinnvoll für Menschen, die mit dem Feld "Nachricht" und "Titel" in Ihre push-Benachrichtigungen.
Verlor ich zwei Tage von meinem Praktikum, da nahm ich meine Zeit, dies zu schreiben, damit andere nicht zu haben.
Du hast Recht @David prieto.
Das problem war, dass die plugin-Quellcode erfordert die push-Benachrichtigung zu haben "Nachricht" - Feld, um die zum auslösen einer Benachrichtigung, wenn auf den hintergrund.
Gibt es einen Weg, um "message" - Feld in der push-Benachrichtigung und einfach.
Nutzlast-array die Daten der Benachrichtigung, die gesendet werden über eine API-Schnittstelle. Es sollte eine "Nachricht" - Feld in der it. Also die push-Benachrichtigung automatisch über eine Nachricht-Feld an, und es wird erkannt im hintergrund sowie Vordergrund zu stellen.
Ich habe das gleiche problem und ich gelöst, indem einige Zeilen des codes.
Ich verwendet phonegap-plugin-push plugin und verändert diese Datei.(für die android-Plattform nur)
plugin-Ordner : phonegap-plugin-push/src/android/com/adobe/phonegap/push/FCMService.java
Plattform Ordner: android/src/com/adobe/phonegap/push/FCMService.java
Sie Sie brauchen, um eine von zwei Dateien, die Sie hängt davon ab, bereits hinzugefügte Plattform oder nicht.
Also änderte ich den code wie folgt.
So kann ich die Benachrichtigung erhalten und verarbeiten es mit localNotification plugin, wie ich will.
Hoffe, das wird Ihnen helfen.