У меня очень странная проблема.После удаления и переустановки приложения iOS 11 (закодированного в swift) я должен запустить приложение несколько раз (от 10 до 20), прежде чем мои сообщения Firebase снова заработают.Я ничего не меняю в коде (иногда я просто жду и часа или около того), и по какой-то причине кажется, что Firebase Messaging Notification работают только после многократного перезапуска моего приложения.Для моего приложения очень важно иметь возможность получать уведомления прямо при первом запуске, поскольку мое приложение в основном зависит от них.Мне просто нужно найти способ заставить работать уведомления при первом запуске приложения после его установки.Я приложил изображения моего кода.(У меня включен method_swizzling)
Если кто-то может помочь мне, я буду очень признателен.Я видел, как видео на YouTube делает то же самое, что и я, и они могут заставить сообщения работать сразу.Я пробовал многое из того, что видел в Интернете, и другие вопросы, которые кажутся такими, но ни один из их методов не работает.Большое спасибо всем, кто пытается помочь!
[править]
Это код для функции запуска приложения:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = ColorScheme.isDark ? .lightContent : .default
FirebaseApp.configure()
// Messaging.messaging().delegate = self
// Messaging.messaging().shouldEstablishDirectChannel = true
// UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in }
// application.registerForRemoteNotifications()
setupMessaging(application: application)
}
Это код дляна самом деле подключение и настройка моего Firebase Messaging:
extension AppDelegate {
func setupMessaging(application: UIApplication) {
Messaging.messaging().delegate = self
Messaging.messaging().shouldEstablishDirectChannel = true
print("channel established", Messaging.messaging().isDirectChannelEstablished)
if #available(iOS 10.0, *) {
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()
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
Messaging.messaging().setAPNSToken(deviceToken, type: .sandbox)
//TODO: Change for release
}
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
}
}
И это функции отладки, которые вызываются при получении уведомления:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print("I got a notification")
print(userInfo)
}
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
print("remote message received")
}
PS мой AppDelegate расширяет MessagingDelegate и UNUserNotificationCenterDelegate