Я использую Firebase в своем приложении iOS и Azure Центр уведомлений на сервере для отправки уведомлений. Я сделал все необходимое, как в этой и этой статьях. Вот мой код AppDelegate.swift:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
FirebaseApp.configure()
Messaging.messaging().delegate = self
return true
}
После этого я звоню на серверную сторону, чтобы зарегистрировать мое приложение для уведомлений в Azure Центре уведомлений. Вот как я получаю токен устройства:
InstanceID.instanceID().instanceID { (result, error) in
if let error = error {
print("Error fetching remote instance ID: \(error)")
} else if let result = result {
let appGuid = KeychainService.loadAppGuid()
let type = "apns"
var str = "native.initClient('" + appGuid!
str += "', '" + AppName
str += "', '\(type)', "
str += "'\(result.token )'"
str += ", '" + HUBNAME + "')"
print(str)
self.webViewController.callJavaScript(command: str)
}
}
А вот как я пытаюсь получить уведомление в моем AppDelegate.swift:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
let gcmMessageIDKey = "gcm.message_id"
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
print(userInfo)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
let gcmMessageIDKey = "gcm.message_id"
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
}
Но ни один из этих методов называются. Pu sh сертификаты уведомлений, идентификаторы и профили являются правильными и действительными. Я запускаю этот код на Xcode Simulator. Почему это не работает?