Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在Swift上实现后台功能_Ios_Swift_Firebase_Background - Fatal编程技术网

Ios 在Swift上实现后台功能

Ios 在Swift上实现后台功能,ios,swift,firebase,background,Ios,Swift,Firebase,Background,我最近刚刚完成了一个应用程序,它基本上有一个Firebase数据库的观察者,当某个属性发生变化时,会发送一个横幅类型的通知。 该应用程序完全可以工作,但当我在后台使用手机时,我意识到它不会运行任何代码或发送通知 如何实现让观察者在后台监听数据库中的任何更改,以及发送通知 以下是通知授权请求功能: func requestNotificationAuthorization() { let authOptions = UNAuthorizationOptions.init(arrayLite

我最近刚刚完成了一个应用程序,它基本上有一个Firebase数据库的观察者,当某个属性发生变化时,会发送一个横幅类型的通知。 该应用程序完全可以工作,但当我在后台使用手机时,我意识到它不会运行任何代码或发送通知

如何实现让观察者在后台监听数据库中的任何更改,以及发送通知

以下是通知授权请求功能:

func requestNotificationAuthorization() {
    let authOptions = UNAuthorizationOptions.init(arrayLiteral: .alert, .badge, .sound)
    
    self.userNotificationCenter.requestAuthorization(options: authOptions) { (success, error) in
        if let error = error {
            print("Error: ", error)
        }}}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    completionHandler()
}
func sendNotification() {
    // Create new notifcation content instance
    let notificationContent = UNMutableNotificationContent()

    // Add the content to the notification content
    notificationContent.title = "P2P Tracker"
    notificationContent.body = (PriceTimeDate ?? "")
    print(notificationContent.body)
    notificationContent.badge = NSNumber(value: 1)

    // Add an attachment to the notification content
    if let url = Bundle.main.url(forResource: "dune",
                                    withExtension: "png") {
        if let attachment = try? UNNotificationAttachment(identifier: "dune",
                                                            url: url,
                                                            options: nil) {
            notificationContent.attachments = [attachment]
        }
    }
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3,
                                                    repeats: false)
    let request = UNNotificationRequest(identifier: "testNotification",
                                        content: notificationContent,
                                        trigger: trigger)
    userNotificationCenter.add(request) { (error) in
        if let error = error {
            print("Notification Error: ", error)
        }
    }
}
通知中心功能:

func requestNotificationAuthorization() {
    let authOptions = UNAuthorizationOptions.init(arrayLiteral: .alert, .badge, .sound)
    
    self.userNotificationCenter.requestAuthorization(options: authOptions) { (success, error) in
        if let error = error {
            print("Error: ", error)
        }}}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    completionHandler()
}
func sendNotification() {
    // Create new notifcation content instance
    let notificationContent = UNMutableNotificationContent()

    // Add the content to the notification content
    notificationContent.title = "P2P Tracker"
    notificationContent.body = (PriceTimeDate ?? "")
    print(notificationContent.body)
    notificationContent.badge = NSNumber(value: 1)

    // Add an attachment to the notification content
    if let url = Bundle.main.url(forResource: "dune",
                                    withExtension: "png") {
        if let attachment = try? UNNotificationAttachment(identifier: "dune",
                                                            url: url,
                                                            options: nil) {
            notificationContent.attachments = [attachment]
        }
    }
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3,
                                                    repeats: false)
    let request = UNNotificationRequest(identifier: "testNotification",
                                        content: notificationContent,
                                        trigger: trigger)
    userNotificationCenter.add(request) { (error) in
        if let error = error {
            print("Notification Error: ", error)
        }
    }
}
以及发送通知功能:

func requestNotificationAuthorization() {
    let authOptions = UNAuthorizationOptions.init(arrayLiteral: .alert, .badge, .sound)
    
    self.userNotificationCenter.requestAuthorization(options: authOptions) { (success, error) in
        if let error = error {
            print("Error: ", error)
        }}}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    completionHandler()
}
func sendNotification() {
    // Create new notifcation content instance
    let notificationContent = UNMutableNotificationContent()

    // Add the content to the notification content
    notificationContent.title = "P2P Tracker"
    notificationContent.body = (PriceTimeDate ?? "")
    print(notificationContent.body)
    notificationContent.badge = NSNumber(value: 1)

    // Add an attachment to the notification content
    if let url = Bundle.main.url(forResource: "dune",
                                    withExtension: "png") {
        if let attachment = try? UNNotificationAttachment(identifier: "dune",
                                                            url: url,
                                                            options: nil) {
            notificationContent.attachments = [attachment]
        }
    }
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 3,
                                                    repeats: false)
    let request = UNNotificationRequest(identifier: "testNotification",
                                        content: notificationContent,
                                        trigger: trigger)
    userNotificationCenter.add(request) { (error) in
        if let error = error {
            print("Notification Error: ", error)
        }
    }
}

简单回答:你不能。相反,您必须在服务器上侦听这些更改,并使用APNS或FCM向用户发送通知。有关示例,请参见:关于允许的后台任务调度器如何?谢谢,我会调查的