2017-10-13 1 views
1

Ich habe APNS mit meiner App verbunden.Swift Push-Benachrichtigungen delegieren Debug-Modus Verhalten

Das Problem liegt in einem unterschiedlichen Verhalten des Systemdelegaten didReceiveRemoteNotification. Es funktioniert nur ordnungsgemäß, wenn der Debugger an die App angefügt ist. Andernfalls wird er nicht aufgerufen, wenn sich die Anwendung im Hintergrund befindet. Der Delegierte wird beispielsweise angerufen, wenn das Testtelefon über das USB-Kabel mit dem Mac verbunden ist und die App debuggt. Direkt nach dem Trennen der Kabelverbindung wird der Delegierte nicht mehr angerufen.

Die Frage ist, wie App-Status (debugged oder nicht) auf didReceiveRemoteNotification Verhalten beeinflussen. (beide IOS 10 und 11)

Um Delegiertenanruf zu erkennen, mache ich Backend-Anfragen und ich bin sicher, dass es kein Problem mit der Anruferkennung gibt.

+0

Welche Methode haben Sie implementieren handhaben? 'application (_: didReceiveRemoteNotification:)' oder 'application (_: didReceiveRemoteNotification: fetchCompletionHandler:)'? – McNight

+0

Ich habe beide implementiert und versuchen, Anruf von beiden zu erkennen. auch keiner arbeitet. – Seaquel

Antwort

0

Ich hatte das gleiche Problem, verbrachte viel Zeit auf der Suche nach einer Lösung. Ich habe eine workaround mentioned in the Apple forums gefunden.

die Klasse, wo Sie die Push-Benachrichtigungen, einen Delegierten von UNUserNotificationCenter

if #available(iOS 10.0, *) { 
    UNUserNotificationCenter.current().delegate = self 
} 

und dann implementieren, um die willPresent notification: UNNotification Methode

@available(iOS 10.0, *) 
extension APNSService: UNUserNotificationCenterDelegate { 
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
     Log.debug?.message("Received push in foreground through UserNotificationCenter, calling Inbox.incrementalSync") 
     ...   
     completionHandler([]) 
    } 
}