Apple Push-Benachrichtigung im Hintergrundproblem

8

Ich verwende parse.com als meinen APN-Provider für eine Test-App, die ich gerade entwickle. Ich habe bestätigt, dass Push-Benachrichtigungen funktionieren, da ich in der Lage war, Warnungen zu erhalten, wenn die App im Vordergrund ist. Außerdem habe ich den Wert remote-notification für den Schlüssel UIBackgroundModes , der in meinem plist angegeben ist.

In meiner App möchte ich die aktuellen Standortdaten eines Benutzers zurück an meine app-spezifische parse.com-Datenbank senden, wenn eine Push-Benachrichtigung empfangen wird. Ich interessiere mich nicht wirklich für die Benachrichtigungs-Nutzlast selbst, da die Benachrichtigung nur ein Mittel ist, um ein kleines Stück Information zu erhalten. Die App sammelt ständig Daten im Hintergrund und speichert sie in einem persistenten NSDictionary .

Ich habe den Sendecode für den Standort in die Methode application:didReceiveRemoteNotification: eingefügt. Wenn meine App im Vordergrund ist, wenn ich eine Benachrichtigung erhalte, wird die Methode aufgerufen. Wenn sich meine App im Hintergrund befindet, wird die Methode nicht aufgerufen.

  • Mache ich etwas falsch?
  • Ist es sogar möglich, eine API-Anfrage in application:didReceiveRemoteNotification: auszuführen, wenn sich die App im Hintergrund befindet und der Benutzer nicht mit der Benachrichtigung interagiert hat? **

BEARBEITEN: Das Problem bleibt bestehen, auch wenn ich application:didReceiveRemoteNotification:fetchCompletionHandler: verwende.

Hinweis: Mein NSDictionary mit den Standortdaten ist nicht leer. Außerdem versuche ich nicht, irgendwelche UI-Manipulationen im Hintergrund auszuführen - ich versuche nur, eine API-Anfrage auszuführen.

    
ArtSabintsev 15.10.2013, 20:54
quelle

4 Antworten

15

Überprüfen Sie Folgendes:

  • Notification Payload enthält "content-available"
%Vor%
    
Alex L 16.10.2013, 12:29
quelle
0
___ qstnhdr ___ Apple Push-Benachrichtigung im Hintergrundproblem ___ answer19403462 ___

Überprüfen Sie Folgendes:

  • Notification Payload enthält "content-available"
%Vor%
    
___ qstntxt ___

Ich verwende parse.com als meinen APN-Provider für eine Test-App, die ich gerade entwickle. Ich habe bestätigt, dass Push-Benachrichtigungen funktionieren, da ich in der Lage war, Warnungen zu erhalten, wenn die App im Vordergrund ist. Außerdem habe ich den Wert %code% für den Schlüssel %code% , der in meinem plist angegeben ist.

In meiner App möchte ich die aktuellen Standortdaten eines Benutzers zurück an meine app-spezifische parse.com-Datenbank senden, wenn eine Push-Benachrichtigung empfangen wird. Ich interessiere mich nicht wirklich für die Benachrichtigungs-Nutzlast selbst, da die Benachrichtigung nur ein Mittel ist, um ein kleines Stück Information zu erhalten. Die App sammelt ständig Daten im Hintergrund und speichert sie in einem persistenten %code% .

Ich habe den Sendecode für den Standort in die Methode %code% eingefügt. Wenn meine App im Vordergrund ist, wenn ich eine Benachrichtigung erhalte, wird die Methode aufgerufen. Wenn sich meine App im Hintergrund befindet, wird die Methode nicht aufgerufen.

  • Mache ich etwas falsch?
  • Ist es sogar möglich, eine API-Anfrage in %code% auszuführen, wenn sich die App im Hintergrund befindet und der Benutzer nicht mit der Benachrichtigung interagiert hat? **

BEARBEITEN: Das Problem bleibt bestehen, auch wenn ich %code% verwende.

Hinweis: Mein NSDictionary mit den Standortdaten ist nicht leer. Außerdem versuche ich nicht, irgendwelche UI-Manipulationen im Hintergrund auszuführen - ich versuche nur, eine API-Anfrage auszuführen.

    
___ answer40297738 ___

Alex L'Antwort fast hat für mich funktioniert.

Stellen Sie nur sicher, dass der Wert von %code% 1 (Zahl) ist, keine Zeichenfolge "1":

%Vor%

%code% Parameter ist optional.

(Verwenden von Parse Server für APNs)

    
___ tag123applepushnotifications ___ Der Apple Push Notification Service ist ein Service von Apple Inc., der zusammen mit iOS 3.0 gestartet wurde. APNS wird zusammen mit Mac OS X Lion Server verwendet, um Updatebenachrichtigungen an Clients zu senden, die sich über ein Konfigurationsprofil für den Empfang von Updates registriert haben Außerdem werden die Mail-, Kalender- und Kontaktdienste des Servers verwendet. Dies bedeutet, dass Geräte wie das iPhone und Anwendungen wie iCal auf dem Mac eine Benachrichtigung erhalten können ___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Features beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die zugehörigen Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ tag123ios ___ iOS ist das mobile Betriebssystem, das auf dem Apple iPhone, iPod touch und iPad ausgeführt wird. Verwenden Sie dieses Tag [ios] für Fragen zur Programmierung auf der iOS-Plattform. Verwenden Sie die verwandten Tags [objective-c] und [swift] für Probleme, die für diese Programmiersprachen spezifisch sind. ___ antwort19390972 ___

Die Dokumentation für UIApplicationDelegate-Anwendung: didReceiveRemoteNotification ist bei dieser Methode ziemlich klar:

  

Wenn die App beim Eintreffen einer Push-Benachrichtigung nicht ausgeführt wird, wird die Methode ausgeführt   startet die App und stellt die entsprechenden Informationen in der   Start Optionen Wörterbuch. Die App ruft diese Methode nicht auf   diese Push-Benachrichtigung. Stattdessen wird Ihre Implementierung der   Anwendung: willFinishLaunchingWithOptions: oder   Anwendung: didFinishLaunchingWithOptions: Methode muss die   Push-Benachrichtigung Nutzdaten und reagieren entsprechend.

Sie müssen Benachrichtigungen in beiden Methoden verarbeiten, um zu antworten, wenn Ihre App im Hintergrund und Vordergrund ist.

    
___ answer24278354 ___

Sie können versuchen, dies anstelle von

zu verwenden %Vor%

Methode, da Sie Ihre Push im Hintergrundmodus holen müssen, also würde dies funktionieren, wenn die App im Hintergrundmodus ist. Möglicherweise müssen Sie jedoch benutzerdefinierte Benachrichtigungen oder UIAlertView hinzufügen, wenn sich die App im Vordergrund befindet, um Ihre Nachricht anzuzeigen. Hoffe es hilft und es ist nicht zu spät.

%Vor%     
___
RyanR 15.10.2013 21:00
quelle
0

Sie können versuchen, dies anstelle von

zu verwenden %Vor%

Methode, da Sie Ihre Push im Hintergrundmodus holen müssen, also würde dies funktionieren, wenn die App im Hintergrundmodus ist. Möglicherweise müssen Sie jedoch benutzerdefinierte Benachrichtigungen oder UIAlertView hinzufügen, wenn sich die App im Vordergrund befindet, um Ihre Nachricht anzuzeigen. Hoffe es hilft und es ist nicht zu spät.

%Vor%     
munfai 18.06.2014 06:22
quelle
0

Alex L'Antwort fast hat für mich funktioniert.

Stellen Sie nur sicher, dass der Wert von content-available 1 (Zahl) ist, keine Zeichenfolge "1":

%Vor%

badge Parameter ist optional.

(Verwenden von Parse Server für APNs)

    
Sergey Filippov 28.10.2016 03:47
quelle