Вы можете попросить разрешения на нажимной уведомления в любом месте вы хотите, где реально, если ваше приложение имеет страницу входа в систему, то обязательно после регистрации вам нужно сделать это.
Вам нужно будет сначала указать код, который запрашивает разрешение в функции в 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)")
}
}
Я там! Я проверил ваш код и, похоже, много устаревшего/неправильного кода. Вы сами это пробовали? Большое спасибо за попытку помочь мне, я ценю это! – askaale
@askaale, что вы быстро используете? Это быстро 3! Нет ничего устаревшего! – AaoIi
Я также использую Swift 3. Странно .. Некоторые из ошибок: «Использование необъявленных типов UNAuthorizationOptions», «Использование неразрешенного идентификатора» UNUserNotificationCenter »,« Незначительная ссылка на приложение-член »и т. Д. Weird .. – askaale