Swift iOS 10 的推送通知

Posted

技术标签:

【中文标题】Swift iOS 10 的推送通知【英文标题】:Push Notifications for Swift iOS 10 【发布时间】:2016-10-26 15:24:28 【问题描述】:

我正在努力让推送通知在 ios 10 中与 Swift 一起使用。注册似乎成功完成,但在设备上创建通知没有任何作用并返回 nil 错误。有什么我想念的想法吗?

import Foundation
import UIKit
import UserNotifications
class SPKPushNotifications

    class func register(application:UIApplication)
        if #available(iOS 10.0, *) 
            let center = UNUserNotificationCenter.current()
            center.requestAuthorization(options:[.badge, .alert, .sound])  (granted, error) in
                // Enable or disable features based on authorization.
                application.registerForRemoteNotifications()
            
         else 
            let notificationTypes: UIUserNotificationType = [UIUserNotificationType.alert, UIUserNotificationType.badge, UIUserNotificationType.sound]
            let pushNotificationSettings = UIUserNotificationSettings(types: notificationTypes, categories: nil)
            application.registerUserNotificationSettings(pushNotificationSettings)
            application.registerForRemoteNotifications()
        
    
    class func unregister(application:UIApplication)
        application.unregisterForRemoteNotifications()
    
    class func create(title:String, body:String, delay:Double, repeats:Bool)
        if #available(iOS 10.0, *) 
            let content = UNMutableNotificationContent()
            content.title = title
            content.body = body
            content.sound = UNNotificationSound.default() //idk if we're gonna want something else
            content.badge = NSNumber(value:UIApplication.shared.applicationIconBadgeNumber+1)
            let trigger = UNTimeIntervalNotificationTrigger(timeInterval:delay, repeats:repeats)
            let request = UNNotificationRequest(identifier:title, content:content, trigger:trigger)
            let center = UNUserNotificationCenter.current()
            center.add(request) (error) in
                print(error)
            

         else 
            // Fallback on earlier versions
        
    
    class func delete()
        if #available(iOS 10.0, *) 
            let center = UNUserNotificationCenter.current()
            center.removeAllDeliveredNotifications()
         else 
            // Fallback on earlier versions
        
    

【问题讨论】:

【参考方案1】:

如果应用程序在前台,您将不会看到通知。当应用程序在后台时,尝试将请求添加到通知中心。

您可以通过添加几秒钟的睡眠并将您的应用程序移至后台来做到这一点(仅用于此测试)。或者当应用程序不在前台运行时将通知安排到稍后的时间。

【讨论】:

延迟 10 秒不起作用。有没有办法通过代码将应用移至后台? 好的,所以我可以使用UIApplication.shared.perform(#selector(URLSessionTask.suspend)) 将应用程序移至后台,并显示通知。但我不想将应用程序移至后台。我希望它在添加通知时保持打开状态。 您可以通过单击主页按钮将应用程序移至设备的后台,在模拟器中您可以使用硬件->主页。如果您的应用程序不在前台,则通知对用户可见。如果您的应用程序在前台,为什么需要通过通知通知他们,您可以使用应用程序中的 UI。也许您可以详细说明您的用例。但这似乎是另一个问题,因为您的推送通知现在正在工作。

以上是关于Swift iOS 10 的推送通知的主要内容,如果未能解决你的问题,请参考以下文章

swift 3,ios 10 - 未收到推送通知 firebase

如何将推送通知令牌存储到外部数据库 - iOS 10,Swift 3

带有 Swift 的 Firebase 推送通知在 ios 11.4 中不起作用

推送通知未在 iOS 10 设备中显示

iOS swift中没有收到推送通知?

如何处理未打开的推送通知(iOS、Swift)