检查是否启用推或位置启用IOS SDK

检查是否启用推或位置启用IOS SDK

问题描述:

我用下面的代码来检测这些2(推送通知和位置服务)检查是否启用推或位置启用IOS 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"]; 

但问题是我一直都想与真正的两种即使我点击不允许在应用程序提示时。同样在设置应用中,我查看了“位置”设置为“从不”,并显示通知子标题。这段代码有什么问题?任何人都可以在此引导我。

只检查[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 * *讨论: *确定用户是否启用位置服务。 *如果否,并且您继续调用其他CoreLocation API,则会提示用户出现警告 *对话框。您可能需要检查此属性并仅在用户明确要求时才使用位置服务。 */ –

+0

理想情况下,它应该返回false。你不觉得吗? –

+0

是的。同意你的观点。它必须返回false。你尝试过设备吗? – pkc456

检查是否推送通知启用或位置服务启用:

推送通知:

从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

阅读文档在这里:

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

定位服务:

需要检查这两个locationServicesEnabledauthorizationStatus一样,

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