要解决APNS只显示一个待处理通知的问题,可以使用以下代码示例:
import UserNotifications
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 设置UNUserNotificationCenter的delegate为AppDelegate
UNUserNotificationCenter.current().delegate = self
// 请求用户授权显示通知
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("用户授权显示通知")
} else {
print("用户未授权显示通知")
}
}
application.registerForRemoteNotifications()
return true
}
// 接收到远程通知时调用
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
print("收到远程通知")
// 处理接收到的通知
// 调用处理通知的方法
handleNotification(userInfo)
}
// 处理通知的方法
func handleNotification(_ userInfo: [AnyHashable : Any]) {
// 解析通知内容
guard let aps = userInfo["aps"] as? [String: Any] else {
return
}
// 获取通知内容
let alert = aps["alert"] as? String ?? ""
// 显示通知
let alertController = UIAlertController(title: "收到通知", message: alert, preferredStyle: .alert)
alertController.addAction(UIAlertAction(title: "确定", style: .default, handler: nil))
// 获取当前显示的控制器
guard let rootViewController = UIApplication.shared.keyWindow?.rootViewController else {
return
}
rootViewController.present(alertController, animated: true, completion: nil)
}
// iOS 10以上的系统会调用该方法来展示通知
// 在该方法中调用处理通知的方法
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// 调用处理通知的方法
handleNotification(userInfo)
// 设置通知展示方式为alert和badge
completionHandler([.alert, .badge])
}
}
UIBackgroundModes
remote-notification
请注意,这只是一个示例代码,具体的实现可能会因为你的应用架构和需求而有所不同。此外,还需要确保在Apple开发者帐号中正确配置APNS和通知证书。
上一篇:APNs证书之间的差异