1

Ich habe Remote-Benachrichtigungen erfolgreich für mein Messaging App einrichten und will die „Schnellantwort“ -Funktionalität von iOS, besser als UNTextInputNotificationAction von UNUserNotificationCenter jetzt bekannt zu integrieren.Schnellantwort: NSURLSessionDataTask von „userNotificationCenter: didReceiveNotificationResponse: withCompletionHandler:“

Ich habe die Texteingabefunktion zu meinen eingehenden Nachrichtenbenachrichtigungen hinzugefügt und es funktioniert wie erwartet.

Mein Problem liegt in der UNUserNotificationCenterDelegate Funktion userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:.

Egal, wie ich die NSURLSessionDataTask-POST die Eingangsantwort userText von UNTextInputNotificationResponse einrichten, die Anfrage immer out-Zeiten. Es funktioniert gut, wenn ich auf eine Benachrichtigung "Schnell antworten" antworte, während die App im Vordergrund ist.

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { 

    if ([response isKindOfClass:UNTextInputNotificationResponse.class]) { 

     if ([response.actionIdentifier isEqualToString:@"REPLY_MESSAGE"]) { 

      [ApiManager chatWithId:@"123456789abcdefg" postTextMessage:[(UNTextInputNotificationResponse *)response userText] completion:^(Message *message) { 

       if (!message) { 

        NSLog(@"Sending failed"); 

       } 

       completionHandler(); 
      }]; 
     } 
    } 

} 

The Data Aufgabe im ApiManager befindet sich auf einem [NSURLSession sharedSession] gebaut - Beachten Sie, dass dies nicht funktioniert hat, auch nachdem er zu backgroundSessionConfigurationWithIdentifier: und Umsetzung der benötigten Delegierten Methoden zu ändern.

Das Protokoll "Senden fehlgeschlagen" kann über die Konsole angezeigt werden, wenn ich den Fehler der DataTask überprüfen, zeigt es einen "Timeout" -Fehler.

Ich vermute, ich habe etwas falsch mit meinem Hintergrund Netzwerk, aber ich kann nicht meinen Kopf darum herum, und nirgendwo ich sah, war eine Antwort zu finden. Die Dokumentation ist auch hier sehr spärlich.

+0

Es ist seltsam, dass Sie einen Timeout-Fehler erhalten. In der Vergangenheit, als ich versuchte, DataTasks aus dem Hintergrund zu starten, erhalte ich eine Fehlermeldung, dass nur Upload- und Download-Aufgaben im Hintergrund ausgeführt werden dürfen, aber keine Datentasks. Versuchen Sie, Ihre Datenaufgabe in eine Upload-Aufgabe zu ändern, und prüfen Sie, ob es Änderungen gibt. –

+0

@John Wickham: Ich habe es mit einer Hintergrundsitzung und einer Uploadaufgabe versucht. Keine funktionierte. Ich bekomme trotzdem immer die Zeitüberschreitung. – Maurice

+0

Das ist sehr interessant. Wie lange dauert es, bis Sie den Timeout-Fehler erhalten? Ich glaube, das Standard-Timeout-Intervall beträgt 60 Sekunden. –

Antwort

0

Für alle, die in der Zukunft über dieses Problem stolpern: Ich konnte es lösen, indem ich content-available:1 zu meiner Push Notification Nutzlast hinzufügte. Ich benutze immer noch eine Daten-Task und eine gemeinsame URL-Sitzung hier. Auch kein Delegierter, der mit Abschlussblöcken arbeitet, für jeden Interessierten.

Ich dachte zunächst, dass das nicht funktionieren würde, das Hinzufügen der verfügbaren Inhaltsflagge hatte eigentlich einen anderen Grund, also ist es schön, dass dies das anfängliche Problem, das ich hatte, löst. Warum dachte ich, das würde nicht funktionieren? Einfach, weil der verfügbare Inhalt, wenn wir der Dokumentation glauben, der App anzeigt, dass Inhalte zum Herunterladen verfügbar sind. Es gibt eine spezielle Anwendung Delegatmethode für speziell diese Situation genannt werden:

application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

Es ist ein Effekt schöne Seite, die die Methode, die auch mehr Zeit, um Benutzeraktionen auf Meldungen reagiert wird zu verarbeiten.

Ordentlicher Bonus: Ich fand auch heraus, dass die schnelle Antwort von der Apple Watch funktionieren würde, ohne dass das inhaltsverfügbare Flag hinzugefügt wurde, da das Betriebssystem der App ermöglicht, längere Hintergrundoperationen auszuführen Anfrage von der Apple Watch.

Verwandte Themen