Как сохранить push-уведомления ios, когда приложение убито с помощью swift - PullRequest
1 голос
/ 06 июня 2019

Я использую свой собственный сервер, использую FCM для отправки уведомлений на устройство ios, push-уведомления успешны, я также использую систему базы данных Realm, чтобы помочь мне сохранять push-уведомления fcm, но хранение будет успешным только в следующих двух случаев. Случай 1: когда приложение работает.

Case2: приложение закрывается или работает в фоновом режиме, когда вы нажимаете, чтобы нажать на уведомление о баннере.

Но это не мое главное намерение. Я знаю, что когда приложение убито, я не могу обработать push-уведомления, поэтому я хочу иметь возможность сохранять push-уведомления, когда пользователь открывает приложение.

Извините, мой английский не очень хорош. Если что-то неясно, пожалуйста, дайте мне знать.

Царство класса

class Order: Object {

    @objc dynamic var id = UUID().uuidString
    @objc dynamic var name = ""
    @objc dynamic var amount = ""
    @objc dynamic var createDate = Date()

    override static func primaryKey() -> String? {
        return "id"
    }

    let realm = try! Realm()
    let order: Order = Order()

AppDelegate.swift (когда приложение запускает сообщение fcm магазина)

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


        let userInfo = notification.request.content.userInfo //
        print("userInfo: \(userInfo)")

        guard
        let aps = userInfo[AnyHashable("aps")] as? NSDictionary,
        let alert = aps["alert"] as? NSDictionary,
        let body = alert["body"] as? String,
        let title = alert["title"] as? String
        else {
            // handle any error here
            return
        }
        print("Title: \(title) \nBody:\(body)")

        order.name = title
        order.amount = body
        try! realm.write {
            realm.add(order)
        }
        completionHandler([.badge, .sound, .alert])
    }

нажмите, чтобы отправить уведомление баннера AppDelegate.swift (когда приложение убито или на заднем плане щелкните, чтобы отправить уведомление о баннере)

   func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {  
        let userInfo = response.notification.request.content.userInfo

        print("userInfo: \(userInfo)")
        guard
            let aps = userInfo[AnyHashable("aps")] as? NSDictionary,
            let alert = aps["alert"] as? NSDictionary,
            let body = alert["body"] as? String,
            let title = alert["title"] as? String
            else {
                // handle any error here
                return
        }
        print("Title: \(title) \nBody:\(body)")

        order.name = title
        order.amount = body
        try! realm.write {
            realm.add(order)
        }
        completionHandler()
    }

Пожалуйста, опытные люди, чтобы помочь мне, большое спасибо.

1 Ответ

2 голосов
/ 06 июня 2019

Вы можете сохранять уведомления в своей базе данных, когда ваше приложение убито.

  1. Добавить "Расширение службы уведомлений" в ваше приложение.
  2. Включить Фоновая выборка / Возможности удаленных уведомлений в ваше приложение.
  3. Включите "Группы приложений" в ваше приложение и включите то же самое с вашим "Расширением службы уведомлений" .

enter image description here

enter image description here

Теперь вы можете получить доступ к вашей базе данных, используя "Группы приложений" , и можете вставлять уведомления в вашу базу данных, как только вы получите уведомление.

Для доступа к базе данных с помощью "App Group "use,

var fileMgr : FileManager!
let databasePathURL = fileMgr!.containerURL(forSecurityApplicationGroupIdentifier: "<APP_GROUPS_ID>")

Из приведенного выше кода, как только вы получите путь для базы данных, вы можете выполнить операцию вставки в базу данных.Это будет ваша обычная операция вставки, которую вы выполняете.

Вставьте код для сохранения данных в этот файл и в метод, выделенный на рисунке ниже.

enter image description here

Для доступа к файлам в Extention следуйте приведенному ниже изображению.enter image description here

Если вам нужна другая помощь, дайте мне знать.

...