Подтвердить что ты не робот

Проверка регистрации Push Notification: isRegisteredForRemoteNotifications Not Updating

Следующий метод сохраняет одно и то же значение:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications];

Каждый раз, когда этот код работает, результаты YES. Даже когда я захожу в приложение "Настройки" и устанавливаю push-уведомления на "off" для своего приложения, когда код выше работает, он вычисляет YES.

Другие сведения: * Я запускаю приложение для получения iphone с iOS 8.1.3 * Я запускаю приложение в Xcode 6.1, и у меня есть телефон, физически прикрепленный к моей машине.

Любая идея, почему значение "isRegisteredForRemoteNotifications" не изменяется?

4b9b3361

Ответ 1

Поскольку iOS 8 регистрирует устройство и предоставляет токен, даже если пользователь отказывается от нажатий.

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

Чтобы проверить, включены ли push-уведомления в iOS 8, вы должны проверить доступные типы уведомлений пользователей:

- (BOOL)pushNotificationsEnabled {
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(currentUserNotificationSettings)]) {
        UIUserNotificationType types = [[[UIApplication sharedApplication] currentUserNotificationSettings] types];
        return (types & UIUserNotificationTypeAlert);
    }
    else {
        UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
        return (types & UIRemoteNotificationTypeAlert);
    }
}

Ответ 2

Если вы используете Swift 2, побитовые операторы не будут работать с UIUserNotificationType. Здесь решение с использованием Swift 2, iOS 8+:

func hasPushEnabled() -> Bool {
        //ios 8+
        if UIApplication.sharedApplication().respondsToSelector("currentUserNotificationSettings") == true {
            let settings = UIApplication.sharedApplication().currentUserNotificationSettings()
            if (settings?.types.contains(.Alert) == true){
                return true
            }
            else {
                return false
            }
        }
        else {
            let types = UIApplication.sharedApplication().enabledRemoteNotificationTypes()
            if types.contains(.Alert) == true {
                return true
            }
            else {
                return false
            }
}