Храните все сообщения, получаемые от «Firebase Pu sh Notification» в мобильном БД / локально - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь сохранить все сообщения, пришедшие с firebase pu sh, в мобильные базы данных, используя UserDefaults . Но в нем хранится только последнее сообщение. Но я хочу, чтобы в БД хранились все полученные сообщения. Пожалуйста, помогите мне решить это. Я застрял с этим.

 let notificationBody = userInfo[AnyHashable("text")]! as! String
 UserDefaults.standard.set(notificationBody, forKey: "notifications") 

---- Это печатает только последнее уведомление -----

1 Ответ

0 голосов
/ 25 марта 2020

Каждый раз, когда вы сохраняете уведомление с помощью этого кода, оно переопределяет текущее значение. Вот почему вы получили только последнее сообщение. Вы можете создать массив уведомлений и сохранить его в userDefaults. затем каждый раз, когда вы получаете новое уведомление, вы можете добавлять новое уведомление к текущему массиву уведомлений в UserDefaults

, сначала вы создаете кодируемый класс для уведомления

class FNotifications: Codable {
  let fnotifications:[FNotification]

    init(fnotifications:[FNotification]) {
        self.fnotifications = fnotifications
    }
}

class FNotification: Codable {

    let id:String
    let type:Int
    let header:String
    let description:String
    let date:String
    let badge:Int
    var status: UInt8

    init(id:String,type:Int,header:String,description:String,date:String,badge:Int,status:UInt8, recordID:String) {
        self.id = id
        self.type = type
        self.header = header
        self.description = description
        self.date = date
        self.badge = badge
        self.status = status
    }
}

, затем вы можете создать массив FNotification и сохраните его в userDefaults (только в первый раз, когда вы захотите создать массив. Во второй раз вы можете получить сохраненный массив и добавить к нему новое уведомление)

//define notification array when its first time
var notification: [FNotification] = []

//add new notification to array
notification.append(FNotification(id: "" ,type: "",header: "", description: "", date:"" , badge: 1, status: 1))

do{
//save to user defaults
UserDefaults.standard.set(try? PropertyListEncoder().encode(notification), forKey: "notifications")
UserDefaults.standard.synchronize()

}catch{
    print(error)
}

После сохранения уведомления, используя этот способ, вы можете получить уведомление, как это

if let notiArray =  UserDefaults.standard.object(forKey: "notifications") as? Data {
        if notiArray.count != 0 {
            notification = try! PropertyListDecoder().decode(Array<FNotification>.self, from: notiArray)
            print("notification \(notification)")
        }
 }
...