2016-03-30 10 views
1

Das ist meine didReceiveRemoteNotification Methode Benachrichtigungen behandeln drücken, wenn sie meinen iOS-App erhalten din:Swift: Wie Push-Benachrichtigung speichern, wenn App läuft?

func showNotificationDetails(userInfo: [NSObject : AnyObject], application:UIApplication) { 
    print("showNotificationDetails") 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let notificationController = storyboard.instantiateViewControllerWithIdentifier("DynamicEventsViewController") as! DynamicEventsViewController 
    notificationController.isLoadedFromNotification = true 
    notificationController.eventTitle = userInfo["aps"]!["alert"] as! String 
    notificationController.eventDescription = userInfo["aps"]!["message"] as! String 
    notificationController.isLoadedFromNotification = true 

    if let tabBarController = self.window?.rootViewController { 
     tabBarController.presentViewController(notificationController, animated: true, completion: nil) 
    } 

    application.applicationIconBadgeNumber -= 1 
    //application.cancelAllLocalNotifications() 

} 


func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 

    let state:UIApplicationState = application.applicationState 
    if (state == UIApplicationState.Inactive || state == UIApplicationState.Background) { 
     self.showNotificationDetails(userInfo, application: application) 
    } 
} 

Das Problem ist, dass, wenn die Anwendung ausgeführt wird und eine Meldung eintrifft, dann wird es nicht gespeichert und es wird gelöscht damit der Benutzer es später nicht sehen kann. Wie soll ich auf die richtige Weise vorgehen, um die Benachrichtigung zu behalten, bis der Benutzer sie liest?

+0

Sie können Alarm mit Benachrichtigung anzeigen, wenn die App im Vordergrund ist –

+0

Es ist genau das, was ich getan hatte, aber mein Chef will nicht, dass ich das tue, weil er sagt, dass es nicht korrekt ist! – user1576208

+2

speichern Sie nur Benachrichtigungsdaten und Sie können lokale Benachrichtigung verwenden. Wenn die App im Hintergrund läuft, prüfen Sie, ob eine gespeicherte Benachrichtigung verfügbar ist, und zeigen Sie dann eine lokale Benachrichtigung an. –

Antwort

0

Erstens, speichern Sie dies nicht in NSUserDefaults wie Divyesh vorgeschlagen. Das ist natürlich nicht das, wofür die Klasse ist, basierend auf dem Namen und jedem schnellen Lesen der Dokumentation.

Zweitens ist Ihr Chef falsch, und Sie müssen in der Lage sein, ihm das zu erklären. Die Dokumentation zu Push-Benachrichtigungen zeigt ziemlich deutlich, was in jedem Staat passiert. Wenn sich die App im Vordergrund befindet und eine Benachrichtigung eingeht und Ihre Flags angeben, dass der Benutzer Warnungen möchte, dann sollten Sie die Warnung anzeigen.

Schließlich, wenn Sie sie wirklich speichern möchten, dann müssen Sie Core Data oder ein Plist oder etwas ähnliches verwenden. Denken Sie jedoch daran, dass Benachrichtigungen keine echten Daten enthalten sollen. Sie geben Ihnen nur eine Art von Flag, auf der Sie basierend darauf reagieren.

+0

Sie haben völlig Recht, aber ich fürchte, ich kann nichts anderes mit ihm tun. Die Lösung, die ich gefunden habe, ist, dass Benachrichtigungen, die ankommen, wenn App aktiv ist, in einem globalen Array gespeichert werden. Sobald die App im Hintergrundstatus (von einem beliebigen Ansichtscontroller) eintritt, werden diese Benachrichtigungen als lokale Benachrichtigung geplant, sodass der Benutzer den Banneralarm sehen kann. Wie auch immer, es gibt Apps wie Whatsapp oder iMessage, die einen Banner-Alarm anzeigen, selbst wenn die App läuft, wenn eine neue Nachricht eintrifft. Wie können sie es tun? Verwenden sie ein 3-teiliges Framework? – user1576208

Verwandte Themen