Включить/отключить уведомление Apple Push от приложения iPhone?
У меня есть еще одно сомнение в APNS
. То есть, когда приложение сначала запускает приложение, запрашивает разрешение Apple Push Notification, если пользователь принял их, они могут получать уведомления. Если пользователь отменен, они не могут получать никаких уведомлений. Я чист??
Теперь я сомневаюсь,
-
В первый раз, если пользователь снова отменил услугу push-уведомления из приложения (нажал кнопку Cancel
) через несколько дней, если они хотят получить уведомление Apple Push, можно снова включить уведомление Apple Push для конкретного пользователя из приложения.
-
И если пользователь сначала принимает услугу уведомления Apple, и через несколько дней, если они не хотят получать уведомления, можно отключить APNS
в нашем приложении? Надеюсь, вы понимаете мои сомнения. Может ли кто-нибудь прояснить это сомнение?
-
Можно ли выполнить эти сценарии в нашем приложении для iPhone?
Пожалуйста, помогите мне. Спасибо заранее.
Ответы
Ответ 1
К сожалению, вы не можете включать или отключать Push-уведомления для вашего приложения из кода приложения. Диалоговое окно, запрашивающее разрешение, отображается только один раз.
Как правило, другие приложения отображают инструкции для включения/выключения push-уведомлений, перейдя в Настройки- > Уведомление- > Имя приложения.
Ответ 2
Вы можете прочитать права доступа к приложениям с помощью UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
, а затем выполнить побитовое и операцию с различными типами, чтобы увидеть, какие из них включены. Вы также можете вызвать unregisterForRemoteNotifications
, чтобы отключить уведомления. Единственное, что вы не можете сделать, это включить уведомления, хотя вы можете направить пользователя.
Ответ 3
Мое требование состояло в том, чтобы включить и отключить pushnotificaton с помощью UISwitch
. В поле включить push-уведомление из кода используйте это внутри действия кнопки.
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
Чтобы отключить
[[UIApplication sharedApplication] unregisterForRemoteNotifications];
NSLog(@"UnRegistered for pushnotification");
Ответ 4
1. Из вашего приложения Нет, это просто первый раз, когда пользователь откроет ваше приложение после установки. Если он решил разрешить ему активировать его с настроек устройства.
2.it можно сделать из приложения и настроек. Если вы хотите отключить его из своего приложения, вы можете отправить токен устройства (который решит отключить push-уведомление) на ваш сервер и сохранить его для ex. как "нет списка уведомлений" и при отправке полезной информации вы игнорируете эти токены, чтобы они не получали уведомление.
3. Я уже отвечаю на него.
Удачи.
Ответ 5
Когда вы впервые даете разрешение, маркер устройства вашего iPhone регистрируется на сервере APN, а затем вы можете получать push-уведомление. Позже вы можете включить/отключить настройки вашего устройства → уведомление → ваше приложение.
Ответ 6
Вы можете использовать этот код для поддержки в iOS 9
if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
if (types == UIUserNotificationTypeNone) {
// Do something
NSLog(@"");
}
} else {
UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
if (types == UIRemoteNotificationTypeNone) {
// Do something
NSLog(@"");
}
}
см. Как обновить код с помощью enabledRemoteNotificationTypes, потому что он "не поддерживается в iOS 8" ,
Ответ 7
Прагматично можно включить и отключить push-уведомление, зарегистрировав и отменив push-уведомление.
Включить Push Notification:
if #available(iOS 10.0, *) {
// For iOS 10.0 +
let center = UNUserNotificationCenter.current()
center.delegate = self
center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
if error == nil{
DispatchQueue.main.async(execute: {
UIApplication.shared.registerForRemoteNotifications()
})
}
}
}else{
// Below iOS 10.0
let settings = UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil)
UIApplication.shared.registerUserNotificationSettings(settings)
//or
//UIApplication.shared.registerForRemoteNotifications()
}
Методы делегата
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
}
@available(iOS 10.0, *)
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// .. Receipt of device token
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
// handle error
}
Отключить Push Notification:
UIApplication.shared.unregisterForRemoteNotifications()