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