Итак, я пытаюсь реализовать облачный обмен сообщениями с функциями Firebase для центра сообщений в моем приложении. Моя функция firebase сообщает, что она уже работает, и я получаю сообщение в моем журнале консоли, однако уведомление не развертывается на моем телефоне в фоновом режиме.
Я реализовал разрешение на получение уведомлений один раз мой пользователь вошел в систему в домашнем представлении. Это мой код:
func askNotificationPermission() {
//Firebase Push Notifications
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in
print("HOLA TE DIERON PERMISO")
})
Messaging.messaging().shouldEstablishDirectChannel = true
UIApplication.shared.registerForRemoteNotifications()
Messaging.messaging().delegate = self
}
Я реализовал необходимые функции Firebase в didFinishLaunchingApplication
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//MARK: Firebase
FirebaseApp.configure()
//Firebase Cloud Messaging
Messaging.messaging().delegate = self
//MARK: Others
//KeyboardManager
IQKeyboardManager.shared.enable = true
//navbar
let navControl = UINavigationBar.appearance()
let myColor : UIColor = UIColor(red: 0, green: 0.1333, blue: 0.3176, alpha: 1)
navControl.tintColor = myColor
return true
}
И это мое расширение для уведомлений в App Delegate:
extension AppDelegate: UNUserNotificationCenterDelegate, MessagingDelegate {
func applicationDidEnterBackground(_ application: UIApplication) {
Messaging.messaging().shouldEstablishDirectChannel = true
}
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
let dataDict: [String: String] = ["token": fcmToken]
NotificationCenter.default.post(name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict)
//TODO: If necessary send token to application server
//Note: This callback is fired at each app startup and whenever a new token is generated
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
Messaging.messaging().appDidReceiveMessage(userInfo)
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print("USER INFO: ",userInfo)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
print("USER INFO IN DID RECEIVE REMOTE NOTIFICAITON:", userInfo, UIBackgroundFetchResult.newData)
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo as! [String:Any]
completionHandler([.alert, .badge, .sound])
print("HOLI")
}
}
Я не знаю, в чем может быть проблема и почему я получаю информацию в консоли, но она не передается в приложение. Я просмотрел несколько вопросов о переполнении стека, но ни один из них не помог.
Это то, что записывает моя консоль:
2020-08-06 11: 06: 06.804344-0500 FleaMarket_UserSide [13985 : 4429211] [] nw_read_request_report [C2] Получение завершилось ошибкой «Программное обеспечение вызвало прерывание соединения» [AnyHashable («title»): Jay Shetty Meditations, AnyHashable («aps»): {«content-available» = 1; }, AnyHashable ("gcm.message_id"): 1596729966264394, AnyHashable ("сообщение"): вы его получили ?, AnyHashable ("google. c .sender.id"): 520471783461] ИНФОРМАЦИЯ О ПОЛЬЗОВАТЕЛЕ В ДИСТАНЦИОННОМ УВЕДОМЛЕНИИ : [AnyHashable ("заголовок"): Медитации Джея Шетти, AnyHashable ("aps"): {"content-available" = 1; }, AnyHashable ("gcm.message_id"): 1596729966264394, AnyHashable ("message"): вы его получили ?, AnyHashable ("google. c .sender.id"): 520471783461] UIBackgroundFetchResult 2020-08-06 11 : 06: 06.835793-0500 FleaMarket_UserSide [13985: 4429216] 6.27.0 - [Firebase / Firestore] [I-FST000001] WatchStream (282c75618) Ошибка потока: «Недоступно: сокет не подключен»