地理位置授權(quán)
需要引用#import <CoreLocation/CoreLocation.h>
- plist
始終允許訪(fǎng)問(wèn)位置
NSLocationAlwaysUsageDescription
位置
NSLocationUsageDescription
在使用期間訪(fǎng)問(wèn)位置
NSLocationWhenInUseUsageDescription
始終允許訪(fǎng)問(wèn)位置并且在使用期間訪(fǎng)問(wèn)位置
NSLocationAlwaysAndWhenInUseUsageDescription
- 判斷
//判斷是否開(kāi)啟
[CLLocationManager locationServicesEnabled];
//獲取具體狀態(tài)
[CLLocationManager authorizationStatus];
- 授權(quán)
CLLocationManager *locManager = [[CLLocationManager alloc] init];
[locManager ]
//獲取始終允許訪(fǎng)問(wèn)位置權(quán)限
[locManager requestWhenInUseAuthorization];
//獲取在使用期間訪(fǎng)問(wèn)位置
[locManager requestAlwaysAuthorization];
相冊(cè)授權(quán)
需要引用#import <AssetsLibrary/AssetsLibrary.h>或#import <Photos/Photos.h>
- plist
訪(fǎng)問(wèn)相冊(cè)
NSPhotoLibraryUsageDescription
添加相冊(cè)
NSPhotoAddLibraryUsageDescription
- 判斷
[ALAssetsLibrary authorizationStatus];
[PHPhotoLibrary authorizationStatus];
- 授權(quán)
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
// 用戶(hù)同意授權(quán)
}
else {
// 用戶(hù)拒絕授權(quán)
}
}];
相機(jī)&麥克風(fēng)授權(quán)
需要引用#import <AVFoundation/AVFoundation.h>
- plist
相機(jī)
NSCameraUsageDescription
麥克風(fēng)
NSMicrophoneUsageDescription
- 判斷
//AVMediaTypeVideo相機(jī) AVMediaTypeAudio麥克風(fēng)
[AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
- 授權(quán)
//AVMediaTypeVideo相機(jī) AVMediaTypeAudio麥克風(fēng)
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if (granted){// 用戶(hù)同意授權(quán)
}
else {// 用戶(hù)拒絕授權(quán)
}
}];
//不推薦慎用
[[AVAudioSession sharedInstance] performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
if (granted){// 用戶(hù)同意授權(quán)
}
else {// 用戶(hù)拒絕授權(quán)
}
}];
通訊錄授權(quán)
需要引用#import <Contacts/Contacts.h>
- plist
通訊錄
NSContactsUsageDescription
- 判斷
[CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]
- 授權(quán)
CNContactStore*contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted,NSError*_Nullable error) {
if (granted){// 用戶(hù)同意授權(quán)
}
else {// 用戶(hù)拒絕授權(quán)
}
}];
蜂窩網(wǎng)絡(luò)授權(quán)
目前無(wú)解,可能以后也無(wú)解
僅可以判斷首次安裝是不是蜂窩網(wǎng)絡(luò)沒(méi)開(kāi)或沒(méi)授權(quán)
引用以下頭文件
#import <SystemConfiguration/CaptiveNetwork.h>
#import <SystemConfiguration/SCNetworkReachability.h>
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
#import <CoreTelephony/CTCellularData.h>
#import <netinet/in.h>
- 判斷
//info不為nil,則當(dāng)前鏈接wifi
- (NSDictionary *)fetchSSIDInfo {
NSArray *ifs = (__bridge_transfer NSArray *)CNCopySupportedInterfaces();
if (!ifs) {
return nil;
}
NSDictionary *info = nil;
for (NSString *ifnam in ifs) {
info = (__bridge_transfer NSDictionary *)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info && [info count]) { break; }
}
return info;
}
//返回CTRadioAccessTechnologyGPRS時(shí)說(shuō)明是2g,網(wǎng)絡(luò)情況復(fù)雜就當(dāng)無(wú)網(wǎng)
- (NSString *)fetchMobileInfo {
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
return info.currentRadioAccessTechnology;
}
- (BOOL)checkNetworkConnect {
// 創(chuàng)建零地址,0.0.0.0的地址表示查詢(xún)本機(jī)的網(wǎng)絡(luò)連接狀態(tài)
struct sockaddr_in zeroAddress;//sockaddr_in是與sockaddr等價(jià)的數(shù)據(jù)結(jié)構(gòu)
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;//sin_family是地址家族,一般都是“AF_xxx”的形式。通常大多用的是都是AF_INET,代表TCP/IP協(xié)議族
/**
* SCNetworkReachabilityRef: 用來(lái)保存創(chuàng)建測(cè)試連接返回的引用
*
* SCNetworkReachabilityCreateWithAddress: 根據(jù)傳入的地址測(cè)試連接.
* 第一個(gè)參數(shù)可以為NULL或kCFAllocatorDefault
* 第二個(gè)參數(shù)為需要測(cè)試連接的IP地址,當(dāng)為0.0.0.0時(shí)則可以查詢(xún)本機(jī)的網(wǎng)絡(luò)連接狀態(tài).
* 同時(shí)返回一個(gè)引用必須在用完后釋放.
* PS: SCNetworkReachabilityCreateWithName: 這個(gè)是根據(jù)傳入的網(wǎng)址測(cè)試連接,
* 第二個(gè)參數(shù)比如為"www.apple.com",其他和上一個(gè)一樣.
*
* SCNetworkReachabilityGetFlags: 這個(gè)函數(shù)用來(lái)獲得測(cè)試連接的狀態(tài),
* 第一個(gè)參數(shù)為之前建立的測(cè)試連接的引用,
* 第二個(gè)參數(shù)用來(lái)保存獲得的狀態(tài),
* 如果能獲得狀態(tài)則返回TRUE,否則返回FALSE
*
*/
SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); //創(chuàng)建測(cè)試連接的引用:
SCNetworkReachabilityFlags flags;
BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);
CFRelease(defaultRouteReachability);
if (didRetrieveFlags && flags == 0) {
//當(dāng)前是沒(méi)有打開(kāi)網(wǎng)絡(luò)情況進(jìn)入,可能是關(guān)閉蜂窩/無(wú)線(xiàn)或進(jìn)入飛行模式
return NO;
}
return YES;
}
- (void)startValidateNetworkAuthorization:(void(^)(CTCellularDataRestrictedState state))block {
CTCellularData *cellularData = [[CTCellularData alloc]init];
cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){
block(state);
//獲取聯(lián)網(wǎng)狀態(tài)
switch (state) {
case kCTCellularDataRestricted:
break;
case kCTCellularDataNotRestricted:
break;
case kCTCellularDataRestrictedStateUnknown:
break;
default:
break;
};
};
}
- 調(diào)用
BOOL checkConnect=YES;
BOOL isConnectWifi=[self fetchSSIDInfo];
BOOL isGPRS=[[self fetchMobileInfo] isEqualToString:CTRadioAccessTechnologyGPRS]||[[self fetchMobileInfo] isEqualToString:CTRadioAccessTechnologyEdge];
BOOL isConnectNetwork=[self checkNetworkConnect];
if (!isConnectWifi) {
checkConnect=NO;
}
if (isGPRS) {
checkConnect=NO;
}
if (!isConnectNetwork) {
checkConnect=NO;
}
if (![[[NSUserDefaults standardUserDefaults] objectForKey:@"firstInstall"] boolValue]) {
[[NSUserDefaults standardUserDefaults] setObject:@(YES) forKey:@"firstInstall"];
if (checkConnect) {
[self startValidateNetworkAuthorization:^(CTCellularDataRestrictedState state) {
if (state != kCTCellularDataRestricted) {
//首次打開(kāi)app,未連接wifi移動(dòng)網(wǎng)絡(luò)正常,即有網(wǎng)情況蜂窩關(guān)閉,需提示用戶(hù)開(kāi)啟蜂窩網(wǎng)絡(luò)
}
}];
}
}
其他授權(quán)
- plist
藍(lán)牙
NSBluetoothPeripheralUsageDescription
媒體資料庫(kù)
NSAppleMusicUsageDescription
音樂(lè)
kTCCServiceMediaLibrary
Siri
NSSiriUsageDescription
語(yǔ)音識(shí)別
NSSpeechRecognitionUsageDescription
日歷
NSCalendarsUsageDescription
健康分享
NSHealthShareUsageDescription
健康更新
NSHealthUpdateUsageDescription
運(yùn)動(dòng)與健康
NSMotionUsageDescription
提醒事項(xiàng)
NSRemindersUsageDescription
FaceID
NSFaceIDUsageDescription
智能家居
NSHomeKitUsageDescription
運(yùn)動(dòng)
NSMotionUsageDescription
NFC
NFCReaderUsageDescription
視頻認(rèn)證
NSVideoSubscriberAccountUsageDescription