Чтобы опробовать Push-уведомления с Firebase, я следовал за этими тремя документами: Один , Два , Три и Четыре .
У меня есть один вопрос, но перед тем, как спросить;вот что я вижу:
Когда мое приложение находится на переднем плане и отправляется уведомление, вызывается только эта функция:
userNotificationCenter(_:willPresent:withCompletionHandler:)
Если я нажимаю на уведомление, то этоодно также называется:
userNotificationCenter(_:didReceive:withCompletionHandler:)
Когда мое приложение находится в фоновом режиме и отправляется уведомление, ничего не вызывается.
Если я нажимаю на уведомление, то это называется:
userNotificationCenter(_:didReceive:withCompletionHandler:)
В результате этой ситуации, без необходимости реагировать (нажав на уведомление);Я могу заставить приложение выполнять некоторые полезные действия, когда уведомление приходит на переднем плане, используя функцию userNotificationCenter (_: willPresent: withCompletionHandler:) .
С другой стороны, в то время как вВ фоновом режиме приложение может выполнять некоторые полезные действия при поступлении уведомления, если пользователь нажимает на уведомление.
Можно ли мне также заставить приложение выполнить какое-либо полезное действие, даже еслиу пользователя нет реакции?
Вот соответствующий код, который у меня есть на данный момент:
import UIKit
import Firebase
import UserNotifications
import FirebaseInstanceID
import FirebaseMessaging
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, MessagingDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {
granted, error in
if error != nil {print("Error: \(error!)")}
if granted {
DispatchQueue.main.async
{application.registerForRemoteNotifications()}
}
})
FirebaseApp.configure()
.......
return true
}
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
print(#function)
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
}
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(#function)
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
}
}
Для информации, я использую Xcode Version 10.1, iOS 12.1 и Swift 4.2.