Я настроил didRegisterForRemoteNotificationsWithDeviceToken в AppDelegate примерно так:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let token = deviceToken.map { String(format:"%02.2hhx", $0) }.joined()
print("didRegisterForRemoteNotificationsWithDeviceToken got called - Token is: \(token)")
// delegate might get called even before an authtoken has been set for the user. Return in such cases:
guard UserDefaults.standard.string(forKey: "authtoken") != nil else {return}
// otherwise continue:
if (token != UserDefaults.standard.string(forKey: "apnsToken")) {
self.apiService.setAPNSToken(apnsToken: token, completion: {result in
switch result {
case .success(let resultString):
DispatchQueue.main.async {
UserDefaults.standard.set(token, forKey: "apnsToken")
print(resultString, " Token is: \(token)")
}
case .failure(let error):
print("An error occured \(error.localizedDescription)")
}
})
} else {
print("User is registered for Push Notifications. Token did not change and is: \(token)")
}
}
Я запрашиваю разрешение пользователя на отправку pu sh Уведомлений в одном из моих контроллеров представления, например так:
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
DispatchQueue.main.async {
if (granted) {
UserDefaults.standard.set(true, forKey: "pushNotificationsEnabled")
}
print("permission granted?: \(granted)")
}
}
Все довольно стандартно, я полагаю. Моя путаница / проблема заключается в следующем: didRegisterForRemoteNotificationsWithDeviceToken не вызывается при взаимодействии с пользователем - то есть я ожидаю, что он будет вызван, как только пользователь нажмет на «allow pu sh notifications», чтобы токен apns был сохранен на моей спине конец. Но это не так. Когда я закрываю приложение и запускаю его снова, didRegisterForRemoteNotificationsWithDeviceToken вызывается, и токен сохраняется в бэкэнде.
Что мне нужно сделать, чтобы получить доступ к токену и сохранить его в бэкэнде для пользователя нажав на кнопку «разрешить уведомления pu sh»?