1) Wenn eine Benachrichtigung kommt, muss ich Daten von AnyHashable ("Daten") "Menge" und "ImBalance" speichern?

2) Vom Server kommen zwei Pushs, erster Push mit "Nachricht", zweiter "Null Nachrichtentext". Wenn keine Nachricht kommt, muss ich sie stumm schalten? Wie kann ich es speichern? Ich verwende xCode 10.2.1

Mein Code für Push Notification.swift sieht aus wie:

enum PillikanRemoteNotification:Int {
    case empty
    case notification = 2
    case news = 3
}

class PushManagerNotification {
    func convert(with value: [AnyHashable: Any], and state: PushNotificationAction) {
        guard let json = value as? [String: AnyObject], !json.isEmpty else { return }
        guard let jsonString = value["data"] as? String, !jsonString.isEmpty else { return }
        guard let jsonData = jsonString.data(using: .utf8) else { return }
        guard let rawDictionary = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableLeaves) else { return }
        guard let dictionary = rawDictionary as? [String: AnyObject] else { return }
        guard let actionType = dictionary["action"] as? String, let action = Int(actionType) else { return }
        guard let notificationType = PillikanRemoteNotification(rawValue: action) else { return }
        guard let messageBody = dictionary["msg"] as? [String: AnyObject] else { return }

        if state == .show {
            showBadges(dictionary: messageBody)
            return
        }

        switch notificationType {
        case .notification:
            showNotification(dictionary: messageBody)
            break
        default:
            break;
        }
    }

    private func showBadges(dictionary: [String: AnyObject]) {
        guard let badgeMessage = dictionary["badges"] as? [String: AnyObject] else { return }
        guard let badges = Badges(JSON: badgeMessage) else { return }
        UIApplication.shared.notificationBadgesForNotification = badges.notifications
        UIApplication.shared.notificationBadgesForNews = badges.news
        UIApplication.shared.applicationIconBadgeNumber = badges.news + badges.notifications
        NotificationCenter.default.post(name: .badges, object: badges)
    }

    private func showNotification(dictionary: [String:AnyObject]) {
        if let message = NotificationEntity(JSON: dictionary) {
            NotificationCenter.default.post(name: .notification, object: message);
        }
    }

extension Notification.Name {
    static let empty = Notification.Name("empty");
    static let notification = Notification.Name("notification");
    static let news = Notification.Name("news");
    static let badges = Notification.Name("badges")
}
0
user10319455 26 Juni 2019 im 08:47

3 Antworten

Beste Antwort

enter image description here

Hier können Sie sehen, wie ich Token von AnyHashable nehme und dann einen bestimmten Wert daraus entnehme.

Versuchen Sie diesen Code. Es wird dir helfen.

if(response.result.isSuccess){
       let data = response.result.value
          print(data!)
            if (data?.contains("access_token"))!{
                var dictonary:NSDictionary?
                    if let data = data!.data(using: String.Encoding.utf8) {
                       do {
                            dictonary = try JSONSerialization.jsonObject(with: data, options: []) as? [String:AnyObject] as NSDictionary?

                                UserDefaults.standard.set(dictonary!["access_token"]!, forKey: "token")


                            }catch let error as NSError {
                                print(error)
                            }
                        }
                     }
                   }
0
Engineer Muhammad Naeem Akram 26 Juni 2019 im 07:33

Für stille Benachrichtigungen gibt es zwei Kriterien:

1.) Das APS-Wörterbuch der Nutzlast muss den inhaltsverfügbaren Schlüssel mit dem Wert 1 enthalten.

2.) Das APS-Wörterbuch der Nutzlast darf keine Alarm-, Sound- oder Ausweisschlüssel enthalten.

Beispiel

{"aps": {"content-available": 1}, "cusomtkey1": "bar", "cusomtkey2": 42}

1
user3383155 26 Juni 2019 im 06:14

Verwenden Sie in der Funktion didReceive Folgendes:

let amount =  userInfo["data"]["amount"]
let inBalance = userInfo["data"]["inBalance"]

Ich bin nicht sicher, ob dies funktionieren wird oder nicht. Ich habe es nicht ausprobiert. Probieren Sie diese Funktion für die Benachrichtigungseigenschaften aus:

@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {


    let userInfo = notification.request.content.userInfo
    let message = userInfo["message"] as! String
    if message.isEmpty == true {

        completionHandler([.alert, .badge])
    }else {

        completionHandler([.alert, .badge, .sound])
    }



}
1
Yasser 26 Juni 2019 im 06:29