2016-08-29 9 views
2

Я использую следующий код, чтобы обнаружить эти 2 (Push Notifications и Location Services)Проверьте нажим включена или расположение позволило ИОС SDk

[postvars setObject:([CLLocationManager locationServicesEnabled])[email protected]"true":@"false" forKey:@"locationServicesEnabled"]; 

    BOOL pushEnabled = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications]; 
    [postvars setObject:(pushEnabled)[email protected]"true":@"false" forKey:@"pushServicesEnabled"]; 

Но вопрос я всегда получаю верно для обоих, даже если Я нажимаю «Не разрешать» при появлении запроса в приложении. Также в приложении настроек я проверил, что для местоположения установлено значение Никогда, а подзаголовок уведомлений отключается. Что случилось с этим кодом? может ли кто-нибудь навестить меня в этом.

ответ

3

Просто проверка [CLLocationManager locationServicesEnabled] не достаточно.

if([CLLocationManager locationServicesEnabled] && 
    [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied) 
{ 
    [postvars setObject:@"true" forKey:@"locationServicesEnabled"]; 

} 

Для Уведомления Проверить этот удивительный SO answer

BOOL pushEnabled = [[UIApplication sharedApplication] isRegisteredForRemoteNotifications]; 
[postvars setObject:(pushEnabled)[email protected]"true":@"false" forKey:@"pushServicesEnabled"]; 

UIRemoteNotificationType types = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 
if (types == UIRemoteNotificationTypeNone) 
    { 
    [postvars setObject:@"false" forKey:@"pushServicesEnabled"]; 
} 
+0

для информации документы говорит /* * locationServicesEnabled * * Обсуждение: * Определяет, включено ли у пользователя службы определения местоположения. * Если нет, и вы переходите к другому API CoreLocation, пользователю будет предложено открыть диалоговое окно предупреждения *. Вы можете проверить это свойство и использовать службы определения местоположения только при явном запросе пользователя. */ –

+0

В идеале он должен возвращать false. Вам не кажется? –

+0

Да. Согласитесь с вашими очками. Он должен возвращать false.Вы пробовали в устройстве? – pkc456

1

Проверьте уведомления Push-Enabled или Location Services Включено:

Push Notifications:

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

, но нажатие кнопки не представляется пользователю, когда нажимается, и он возвращает true.

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

enabledRemoteNotificationTypes является устаревшим с iOS8.

Чтобы проверить отдаленную статус уведомлений в iOS8 вы можете использовать:

[[UIApplication sharedApplication] isRegisteredForRemoteNotifications]; 

Проверить ответы здесь: detect “Allow Notifications” is on/off for iOS8

прочитанной Docs здесь:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/index.html#//apple_ref/occ/instm/UIApplication/currentUserNotificationSettings

Также читайте нить здесь : https://forums.developer.apple.com/thread/16958

Расположение Услуги:

необходимо проверить как locationServicesEnabled и authorizationStatus как,

if([CLLocationManager locationServicesEnabled] && 
    [CLLocationManager authorizationStatus] != kCLAuthorizationStatusDenied) 
{ 
    //Enabled 
}