2015-05-06 3 views
3

Я предлагаю моему пользователю включить push-уведомления после входа пользователя в мое приложение. Я знаю, как тестировать, если push-уведомления активированы или отключены с помощью:Проверьте, не подтвержден ли статус уведомлений iOS

isRegisteredForRemoteNotifications 

и он отлично работает. Он возвращает YES для разрешенных и НЕТ для недоступных, но я хочу выяснить, как проверить Не определено (пользователю не было предложено включить push-уведомления для начала). Есть ли способ проверить это?

Заранее благодарен!

ответ

1

isRegisteredForRemoteNotifications является Bool. Нет неопределенного статуса. Вы можете проверить, что это reference.

Когда пользователь сначала устанавливает ваше приложение, они должны либо разрешать, либо запрещать push-уведомления. Другого возможного варианта нет.

Однако, возможно, вы спрашиваете, потому что вы можете удалить приложение, переустановить и не попросите разрешения. Это потому, что разрешение запоминается.

Сброс Нажмите Уведомление Permissions оповещения о прошивке первый раз нажимные с поддержкой регистры приложения для уведомления толчка, IOS запрашивает у пользователя, если они хотят, чтобы получать уведомления о том, что приложении. Как только пользователь ответил на это предупреждение, он не будет представлен повторно, если устройство не будет восстановлено или приложение не будет удалено, по крайней мере, на один день.

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

Удалите приложение с устройства. Полностью выключите устройство и включите его. Выберите «Настройки»> «Общие»> «Дата» & Время и установите дату в день или более. Полностью выключите устройство и включите его снова.

Reference

Попутный вопрос: When I delete my iOS application push notification state remains

EDIT:

Вы можете использовать только isRegisteredForRemoteNotifications, чтобы проверить, что они просто не регистрируются, то ли это, что из-за снижения или из-за вас никогда не пытается зарегистрироваться.

Однако, до тех пор, как вы пытаетесь зарегистрироваться в действительном образом (действительные сертификаты и профили и т.д.), а также снижение пользователей, ваше приложение будет вызывать даже регистрироваться, но с нулевым UIUserNotificationSettings:

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) { 

    if notificationSettings.types == nil { 
     println("You didn't allow notifcations") 
    } 

} 
+1

Спасибо за ответ. Я не спрашивал, потому что я пытаюсь удалить приложение. В моем случае я зарегистрировался для удаленных уведомлений после того, как пользователи вошли в систему (а не при запуске), поэтому есть случай, когда статус уведомлений будет неопределенным. Я думаю, что лучший способ задать это будет: есть ли обнаружение, если пользователь отклонил push-уведомления. –

2

Вы создаете Not Determined укажите себя.

func registerNotification() { 
    // 1.Call register API 
    // ... 

    // 2.Save a bool value to indicate you've called this method or not. 
    let appleSuggestedUserDefaultsKeyPrefix = "com.yourcompany.product-" 
    let key = appleSuggestedUserDefaultsKeyPrefix + "didCallRegisterNotificationAPI" 
    NSUserDefaults.standardUserDefaults().setBool(true, forKey: key) 
} 

И в didFinishLaunchingWithOptions методе вам нужно проверить, если вы назвали registerNotification().

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { 
    let didCallRegisterNotificationAPI = NSUserDefaults.standardUserDefaults().boolForKey(...) 
    if didCallRegisterNotificationAPI { 
     // If registered or user denied, call this method will NOT show the alert. 
     // Just the same as you did before. 
     registerNotification() 
    } else { 
     print("registerNotification() has not been called") 
    } 
} 

И, наконец, вы можете позвонить registerNotification() непосредственно в любом месте в любое время, как вам нужно, и предупреждение находится под вашим контролем.

+0

Я пробовал все возможные решения от iOS, но никто из них не работает, в конце концов, я должен реализовать это сам, на данный момент, по крайней мере. – Sikander

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