SwiftUI 前台显示消息推送

SwiftUI 前台显示消息推送

问题描述

今天捣鼓了一天消息推送,想要实现的效果是 SwiftUI 中软件在前台运行时也可以进行消息推送(本地)。但是 UserNotifications 里面默认是只有软件在后台才能推送,如果软件运行在前台是没有效果的。🖕

苹果这个坑爹玩意,IOS 每次版本更新都有很多变化,很多以前的解决方案都没法用。

终于在晚上准备睡觉前找到了一个目前可用解决方案(以后不清楚)。

解决方案

由于我用的是比较新版本的 SwiftUI,所以没有 AppDelegate.swift 了,那么在 xxxApp.swift 文件中添加代码如下:

  • 不要忘记在 @main 里面还有一行代码!
class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        // Show local notification in foreground
        UNUserNotificationCenter.current().delegate = self
        return true
    }
}
// Conform to UNUserNotificationCenterDelegate to show local notification in foreground
extension AppDelegate: UNUserNotificationCenterDelegate {
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.badge, .sound])
    }
}


@main
struct wisdom_fire_controlApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
             ContentView()
        }
    }
}

时至 2022.2.10,亲测有效,后面就不知道了。

附上 google 到的解决方案原帖:https://ishtiz.com/swift/how-to-show-local-notification-when-the-app-is-foreground

百度搜出来的 SwiftUI 相关资料基本被某人以收费的名义霸占了… 实际上我告诉大家,那个人的代码我在 google 不止见过一次,见过很多篇英文文章甚至源码都和他一模一样。感觉只要他的代码里出现英文注释,基本就是抄的…

最后提一句,IOS 开发真的锻炼心态和英语。。。现在已经快习惯去谷歌翻英文文档了。放以前看到英文页面我直接 X 掉,现在不行哟,SwiftUI 相关的资料实在是太少了,只能去国外翻最新资料。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萌宅鹿同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值