返回

SwiftUI 中保存推送通知正文的终极指南:告别丢失的通知!

IOS

SwiftUI 中保存推送通知正文:全面指南

简介

推送通知在保持用户参与和及时通知他们应用程序更新方面至关重要。然而,在应用程序关闭或处于后台时获取推送通知正文可能会很棘手。本文将深入探讨如何在 SwiftUI 应用程序中处理这种情况,以便你可以在需要时检索通知正文。

步骤:

1. 成为 MessagingDelegate

首先,你需要在应用程序委托(AppDelegate)中实现 MessagingDelegate 协议。这将允许你处理设备接收到的通知。

2. 处理通知数据

MessagingDelegateapplication(_:didReceiveRemoteNotification:) 方法中,你可以处理传入的通知数据。从这里你可以提取通知类型、正文和标题。

3. 从 UserDefaults 获取数据

使用 UserDefaults 存储之前接收的通知数据。这允许你在应用程序重新启动或从后台恢复后检索通知。

4. 添加新数据

将从通知中提取的新数据添加到从 UserDefaults 中检索到的现有数据中。

5. 保存更新后的数据

将更新后的数据集合保存回 UserDefaults 以供以后使用。

代码示例:

以下代码示例演示了如何在 SwiftUI 应用程序中实现上述步骤:

import UserNotifications

class AppDelegate: NSObject, UIApplicationDelegate, MessagingDelegate {
    // 其他方法...

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
        // 从通知中提取数据
        if let type = userInfo["type"] as? String,
           let aps = userInfo["aps"] as? [String: Any],
           let alert = aps["alert"] as? [String: Any],
           let body = alert["body"] as? String,
           let title = alert["title"] as? String {

            // 从 UserDefaults 获取当前数据
            var notifications = UserDefaults.standard.array(forKey: "notifications") as? [[String: String]] ?? []

            // 创建字典包含通知数据
            let notificationData: [String: String] = ["type": type, "body": body, "title": title]

            // 将新数据添加到现有数据
            notifications.append(notificationData)

            // 将更新后的数据保存到 UserDefaults
            UserDefaults.standard.set(notifications, forKey: "notifications")
            UserDefaults.standard.synchronize() // 可选,如果需要立即保存
        }
    }
}

结论

通过实施本文中概述的步骤,你可以在 SwiftUI 应用程序中有效地保存和检索推送通知的正文,即使在应用程序关闭或处于后台时也能做到。这将使你能够为用户提供更好的体验,并确保他们在需要时能够及时收到重要信息。

常见问题解答

1. 是否可以将通知数据存储在数据库中,而不是 UserDefaults?

是的,你可以将通知数据存储在数据库中,这可以提供更好的持久性和可扩展性。但是,这需要更多的实现工作。

2. 如何从 UserDefaults 中检索通知数据?

使用 UserDefaults.standard.array(forKey: "notifications") 检索存储在 UserDefaults 中的通知数据。

3. 应用程序处于后台时,是否可以在设备解锁后检索通知数据?

是的,即使应用程序处于后台,在设备解锁后,你仍然可以从 UserDefaults 中检索通知数据。

4. 是否可以在 SwiftUI 预览中测试推送通知功能?

不,推送通知无法在 SwiftUI 预览中进行测试,因为它们需要真实的设备环境。

5. 如果通知没有正文,怎么办?

如果你从推送通知中提取不到正文,则需要处理这种情况并相应地更新通知数据。