如何在使用swift终止应用程序时存储ios推送通知

如何在使用swift终止应用程序时存储ios推送通知,ios,swift,firebase-cloud-messaging,apple-push-notifications,Ios,Swift,Firebase Cloud Messaging,Apple Push Notifications,我使用自己的服务器,使用FCM将通知推送到ios设备,推送通知成功,我还使用Realm数据库系统帮助我存储FCM推送通知,但存储仅在以下两种情况下成功。 案例1:应用程序运行时 案例2:当您单击推送横幅通知时,应用程序被终止或在后台运行 但这不是我的主要意图。我知道当应用程序被终止时,我无法处理推送通知,因此我希望能够在用户打开应用程序时存储推送通知 对不起,我的英语不好。如果有什么不清楚的地方,请告诉我 王国级 class Order: Object { @objc dynamic

我使用自己的服务器,使用FCM将通知推送到ios设备,推送通知成功,我还使用Realm数据库系统帮助我存储FCM推送通知,但存储仅在以下两种情况下成功。 案例1:应用程序运行时

案例2:当您单击推送横幅通知时,应用程序被终止或在后台运行

但这不是我的主要意图。我知道当应用程序被终止时,我无法处理推送通知,因此我希望能够在用户打开应用程序时存储推送通知

对不起,我的英语不好。如果有什么不清楚的地方,请告诉我

王国级

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()
    }

请有经验的人来帮助我,非常感谢。

当你的应用程序被终止时,你可以将通知存储到你的数据库中

将通知服务扩展添加到您的应用程序。 在应用程序中启用后台获取/远程通知功能。 在应用程序中启用应用程序组,并在通知服务扩展中启用相同的应用程序组。 现在,您可以使用应用程序组访问数据库,并可以在收到通知后立即将通知插入数据库。 要使用应用程序组访问数据库,请使用

var fileMgr : FileManager!
let databasePathURL = fileMgr!.containerURL(forSecurityApplicationGroupIdentifier: "<APP_GROUPS_ID>")
从上面的代码中,一旦获得数据库的路径,就可以在数据库中执行插入操作。这将是您正在执行的正常插入操作

插入用于在此文件和下图中突出显示的方法中保存数据的代码

要访问扩展名中的文件,请按照下图进行操作。


如果你需要任何其他帮助,一定要告诉我

当你的应用程序被终止时,你可以将通知存储到数据库中

将通知服务扩展添加到您的应用程序。 在应用程序中启用后台获取/远程通知功能。 在应用程序中启用应用程序组,并在通知服务扩展中启用相同的应用程序组。 现在,您可以使用应用程序组访问数据库,并可以在收到通知后立即将通知插入数据库。 要使用应用程序组访问数据库,请使用

var fileMgr : FileManager!
let databasePathURL = fileMgr!.containerURL(forSecurityApplicationGroupIdentifier: "<APP_GROUPS_ID>")
从上面的代码中,一旦获得数据库的路径,就可以在数据库中执行插入操作。这将是您正在执行的正常插入操作

插入用于在此文件和下图中突出显示的方法中保存数据的代码

要访问扩展名中的文件,请按照下图进行操作。


如果你需要任何其他帮助,一定要告诉我

谢谢你的回答。这是我第一次使用这种方法。您能否解释步骤3、步骤4的详细信息,并提供一些代码?例如,在步骤3中,我只需要打开应用程序和通知服务扩展应用程序组?使用第3点的图像更新答案。在第一次创建数据库时,您需要添加使用Appgroup创建数据库的代码,可能是数据库助手类。然后在您的didReceiveNotificationRequest服务扩展方法中添加插入数据库的代码。非常感谢您用图片指导我,让我完全理解!但我仍然不知道代码将添加到哪里。是在AppDelegate.swift中获取FCM消息并将其存储在领域数据库中吗?@sinnnene更新了我的答案。请检查。感谢您的解释,我正在使用领域数据库,但我无法在NotificationService中导入RealmSwift和Firebase。我不明白。这里没有关于FCM的信息。如何存储信息?谢谢您的回答。这是我第一次使用这种方法。您能否解释步骤3、步骤4的详细信息,并提供一些代码?例如,在步骤3中,我只需要打开应用程序和通知服务扩展应用程序组?使用第3点的图像更新答案。在第一次创建数据库时,您需要添加使用Appgroup创建数据库的代码,可能是数据库助手类。然后在您的didReceiveNotificationRequest服务扩展方法中添加插入数据库的代码。非常感谢您用图片指导我,让我完全理解!但我仍然不知道代码将添加到哪里。是在AppDelegate.swift中获取FCM消息并将其存储在领域数据库中吗?@sinnnene更新了我的答案。请检查。感谢您的解释,我正在使用领域数据库,但我无法在NotificationService中导入RealmSwift和Firebase。我不明白。这里没有关于FCM的信息。如何存储信息?