1

Мне было интересно, как я могу пригласить пользователя с хорошо известным «приложение» хочет отправить вам push-уведомления после того, как пользователь зарегистрировался как пользователь в моем приложении, а не как пользователь открывает мое приложение по умолчанию (даже не будучи пользователем).Swift FIRMessaging отправляет запрос на push-уведомление при регистрации

Как мне это сделать? Я думал, что вы настроите настройки push-уведомлений в appDelegate.swift? Заранее спасибо!

ответ

3

Вы можете попросить разрешения на нажимной уведомления в любом месте вы хотите, где реально, если ваше приложение имеет страницу входа в систему, то обязательно после регистрации вам нужно сделать это.

Вам нужно будет сначала указать код, который запрашивает разрешение в функции в AppDelegate.swift.

func registerUserNotification() { 


     if #available(iOS 10.0, *) { 
      let authOptions : UNAuthorizationOptions = [.alert, .badge, .sound] 

      UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { (bool, error) in 

       UNUserNotificationCenter.current().delegate = self 

       if (error == nil) { 
        // its required for iOS 11 to avoid getting warning about "UI API called on a background thread" 
        DispatchQueue.main.async { 

        UIApplication.shared.registerForRemoteNotifications() 

        } 
       } 

      }) 


     } else { 
      if UIApplication.shared.responds(to: #selector(UIApplication.registerUserNotificationSettings(_:))) { 

       let types:UIUserNotificationType = ([.alert, .badge, .sound]) 
       let settings:UIUserNotificationSettings = UIUserNotificationSettings(types: types, categories: nil) 
       UIApplication.shared.registerUserNotificationSettings(settings) 
       UIApplication.shared.registerForRemoteNotifications() 

      } 

     } 
} 

Примечание: Также не забудьте import UserNotifications, чтобы иметь возможность использовать последнюю версию SDK для прошивки 10.

в любом контроллере представления вы должны ссылаться на приложение делегата и вызов этой функции:

let appDelegate = UIApplication.shared.delegate as! AppDelegate 
    appDelegate.registerUserNotification() 

Update 1:

Вы ж больна необходимостью реализация делегата UNUserNotificationCenter в дальнейшем, поместите следующий код в конце AppDelegate из области видимости класса (}), это необходимо для прошивки 10:

@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) { 

     print("Userinfo \(notification.request.content.userInfo)") 



    } 


    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 

     print("Userinfo \(response.notification.request.content.userInfo)") 



    } 



} 
+0

Я там! Я проверил ваш код и, похоже, много устаревшего/неправильного кода. Вы сами это пробовали? Большое спасибо за попытку помочь мне, я ценю это! – askaale

+0

@askaale, что вы быстро используете? Это быстро 3! Нет ничего устаревшего! – AaoIi

+0

Я также использую Swift 3. Странно .. Некоторые из ошибок: «Использование необъявленных типов UNAuthorizationOptions», «Использование неразрешенного идентификатора» UNUserNotificationCenter »,« Незначительная ссылка на приложение-член »и т. Д. Weird .. – askaale

1

Вы можете пройти через всю конфигурацию удаленных уведомлений, описанную Firebase, но пропустите действия, предлагающие пользователю «приложение хочет отправить вам push-уведомления». Затем, когда ваш пользователь выполнит ваш процесс регистрации, запросите авторизацию push-уведомлений от iOS.

В следующем коде показаны критические фрагменты, которые будут отображать системные подсказки пользователю. Их можно вызвать в любое время. Они также являются строками кода, которые необходимо оставить без внимания при запуске приложения.

func turnOnNotifications() { 
    if #available(iOS 10.0, *) { 
     UNUserNotificationCenter 
      .currentNotificationCenter() 
      .requestAuthorizationWithOptions([.Alert, .Badge, .Sound]) { authorized, error in 
     } 
    } else { 
     let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: .None) 
     UIApplication.sharedApplication().registerUserNotificationSettings(settings) 
    } 
} 
+0

Я получаю сообщение об ошибке на UNUserNotificationCenter, это неправильное обращение? Спасибо за попытку помочь мне! – askaale

+0

Вам понадобится следующий импорт: Firebase, FirebaseMessaging и UserNotifications – kjones

+0

Да, я сделал - однако мне удалось решить проблему с полным кодом выше. Несмотря ни на что, я хотел бы поблагодарить вас за ваш вклад. Я ценю это. – askaale

Смежные вопросы