轉載連結:http://www.cocoachina.com/ios/20151214/14502.html
iOS系統版本的不斷更新的前提,伴随着使用者使用裝置的安全性提升,iOS系統對于App需要使用的硬體限制也越來越嚴格,App處理稍有不妥,輕則造成功能不可用使用者還不知道,重則會造成App Crash。
當使用者在App啟動時,看到彈出來的一條條“XXX 請求通路您的位置” “XXX 請求通路您的通訊錄” “XXX 請求通路您的月曆” “XXX 請求通路您的攝像頭” 等一系列消息時,使用者覺得不耐煩的同時,也會由于一時的安全考慮而把相應的功能給屏蔽掉,這還隻是開始,當使用者真正在使用對應功能的時候,就會出現一連續的奇怪現象,比如資料顯示異常:明明通訊錄裡面有資訊,卻總是加載不出資料;有的甚至是直接Crash。
下面,筆者将會綜合性地把上述硬體的授權檢測,一一地詳細列出,并給出相關示例代碼:
1、定位服務
相關架構
1 | |
檢測方法
1 | |
相關傳回參數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
2、通訊錄
1 | |
檢測方法
1 | |
授權狀态
1 2 3 4 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
3、月曆/提醒事項授權
1 | |
檢測方法
1 | |
參數類型
1 2 3 | |
授權狀态
1 2 3 4 5 6 7 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
4、照片庫授權
1 | |
檢測方法
1 | |
授權狀态
1 2 3 4 5 6 7 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
5、藍牙授權狀态檢測
1 | |
檢測方法
1 | |
授權狀态
1 2 3 4 5 6 7 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
6、攝像頭授權狀态檢測
1 | |
檢測方法
1 | |
授權狀态
1 2 3 4 5 6 7 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
7、麥克風授權狀态檢測
1 | |
檢測方法
1 | |
授權狀态
1 2 3 4 5 | |
參考代碼
1 2 3 4 5 6 7 8 9 10 11 12 | |
8 .
聯網權限
- 引入頭檔案 @import CoreTelephony;
- 應用啟動後,檢測應用中是否有聯網權限
CTCellularData *cellularData = [[CTCellularData alloc]init]; cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state){ //擷取聯網狀态 switch (state) { case kCTCellularDataRestricted: NSLog(@"Restricrted"); break; case kCTCellularDataNotRestricted: NSLog(@"Not Restricted"); break; case kCTCellularDataRestrictedStateUnknown: NSLog(@"Unknown"); break; default: break; }; };
- 查詢應用是否有聯網功能
CTCellularData *cellularData = [[CTCellularData alloc]init]; CTCellularDataRestrictedState state = cellularData.restrictedState; switch (state) { case kCTCellularDataRestricted: NSLog(@"Restricrted"); break; case kCTCellularDataNotRestricted: NSLog(@"Not Restricted"); break; case kCTCellularDataRestrictedStateUnknown: NSLog(@"Unknown"); break; default: break; }
最後一點
- 素有擷取權限的方法,多用于使用者第一次操作應用,iOS 8.0之後,将這些設定都整合在一起,并且可以開啟或關閉相應的權限。所有的權限都可以通過下面的方法打開:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];