gpt4 book ai didi

ios - 如何在使用 swift 杀死应用程序时存储 ios 推送通知

转载 作者:搜寻专家 更新时间:2023-11-01 06:52:08 24 4
gpt4 key购买 nike

我用的是自己的服务器,使用FCM向ios设备推送通知,推送成功,我也是用Realm数据库系统帮我存储fcm推送通知,但是存储只会在以下两种情况下成功个案。Case1:应用运行时。

Case2:点击推送banner通知时,应用被杀死,或者后台运行。

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

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

领域类

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

点击推送banner通知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. 在您的应用中启用后台获取/远程通知功能
  3. 在您的应用中启用“应用组”,并在您的“通知服务扩展”中启用它。

enter image description here

enter image description here

  1. 现在您可以使用“应用组”访问您的数据库,并且可以在收到通知后立即将通知插入您的数据库。

要使用“App Group”访问数据库,

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

从上面的代码中获得数据库的路径后,您就可以执行插入数据库的操作。这将是您正在执行的正常插入操作。

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

enter image description here

要将您的文件访问到 Extention,请按照下图操作。 enter image description here

如果您需要任何其他帮助,请告诉我。

关于ios - 如何在使用 swift 杀死应用程序时存储 ios 推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com