1

Я разрабатываю приложение с целью развертывания iOS 7.1. Я использую Firebase для push-уведомлений. Push-уведомления работают нормально в устройствах iOS 9. Но не работает на устройствах iOS 10.Как отправить push-уведомление в iOS 10 через FCM (Firebase) или на родном?

Когда я искал, я нашел это примечание here.

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_9_x_Max) { 
    UIUserNotificationType allNotificationTypes = 
    (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge); 
    UIUserNotificationSettings *settings = 
    [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 
} else { 
    // iOS 10 or later 
    #if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 
    UNAuthorizationOptions authOptions = 
     UNAuthorizationOptionAlert 
     | UNAuthorizationOptionSound 
     | UNAuthorizationOptionBadge; 
    [[UNUserNotificationCenter currentNotificationCenter] 
     requestAuthorizationWithOptions:authOptions 
     completionHandler:^(BOOL granted, NSError * _Nullable error) { 
     } 
    ]; 

    // For iOS 10 display notification (sent via APNS) 
    [[UNUserNotificationCenter currentNotificationCenter] setDelegate:self]; 
    // For iOS 10 data message (sent via FCM) 
    [[FIRMessaging messaging] setRemoteMessageDelegate:self]; 
    #endif 
} 

И это примечание:

Важно: для устройств, работающих под управлением IOS 10 и выше, вы должны назначить свой объект делегата для объекта UNUserNotificationCenter получить отображение уведомлений.

Необходимо послать push-уведомление через этот метод (который является новым классом UNUserNotificationCenter)? возможно ли это благодаря старым методам регистрации push-уведомлений?

Пожалуйста, дайте мне знать. Из-за этого мне нужно обновить свой проект до Swift версии 2.3 или 3.0, и это займет время.

+1

Да это займет время, и вам необходимо обновить вышеуказанные методы, перечисленные на https://firebase.google.com/docs/cloud-messaging/ИОС/клиент. Это связано с внедрением UserNotifications в iOS 10. –

+0

@iOSCuriosity благодарит за ответ. –

+0

@iOСкачительность У меня такая же проблема. Мое приложение готово к выпуску appstore. Теперь у меня нет времени, чтобы изменить мое приложение на быстрое 3. Есть ли какое-либо решение для получения push-уведомлений в устройствах ios10 без обновления xcode и swift? –

ответ

0

Пример в документах Firebase устарел. Вот код для самого последнего Xcode 8 и Swift 3:

import Firebase 
import FirebaseMessaging 
import UserNotifications 

class AppDelegate: UIResponder, UIApplicationDelegate { 


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 


     FIRApp.configure() 

     if #available(iOS 10.0, *) { 
      let authOptions : UNAuthorizationOptions = [.alert, .badge, .sound] 
      UNUserNotificationCenter.current().requestAuthorization(
       options: authOptions, 
       completionHandler: {_,_ in }) 

      // For iOS 10 display notification (sent via APNS) 
      UNUserNotificationCenter.current().delegate = self 
      // For iOS 10 data message (sent via FCM) 
      FIRMessaging.messaging().remoteMessageDelegate = self 

     } 

     application.registerForRemoteNotifications() 

     return true 
    } 
} 


@available(iOS 10, *) 
extension AppDelegate : UNUserNotificationCenterDelegate { 

    // Receive displayed notifications for iOS 10 devices. 

    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
     let userInfo = notification.request.content.userInfo 
     // Print message ID. 
     print("Message ID: \(userInfo["gcm.message_id"]!)") 

     // Print full message. 
     print("%@", userInfo) 

    } 

} 

extension AppDelegate : FIRMessagingDelegate { 
    // Receive data message on iOS 10 devices. 
    func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) { 
     print("%@", remoteMessage.appData) 
    } 
} 
Смежные вопросы