最友好的訪問權限之iOS權限提示
先來看Periscope的兩張截圖,國內目前還沒有見到過細節如此精致的產品。
Periscope
Periscope
想到國內APP的一個一個挨著點的糟糕體驗再對比下Periscope,我的心癢癢了。于是在520這個單身狗的日子里我 決定寫出來 封裝出來。
iOS的各種權限
1.定位權限 Privacy - Location When In Use Usage Description|Privacy - Location Always Usage Description|Privacy - Location Usage Description
2.藍牙權限 Privacy - Bluetooth Peripheral Usage Description
3.推送權限 (Target-選項開關打開)
4.媒體資料庫權限 Privacy - Media Library Usage Description
5.語音識別權限 Privacy - Speech Recognition Usage Description
6.日歷權限 Privacy - Calendars Usage Description
7.相冊權限 Privacy - Photo Library Usage Description
8.相機權限 Privacy - Camera Usage Description
9.通訊錄權限 Privacy - Contacts Usage Description
10.麥克風權限 Privacy - Microphone Usage Description
11.提醒事項權限 Privacy - Reminders Usage DescriptionPrivacy - Reminders Usage Description
12.運動與健身 Privacy - Motion Usage Description
....
一開始想到了前面3個有代理所以畫了個腦圖決定規劃一下,如下:
1.NSAuthorityStatus
負責管理權限的各種狀態
NSAuthorityStatus
2.NSAuthorityProtocol
負責管理定位變化等前面三個權限的代理
時間關系實現了第一個協議,一覺睡醒下午3點了。想著一切從簡單調用就匆匆搞完第一個協議開始寫下面的調用方法。
NSAuthorityProtocol
3.NSAuthoritySingleton
純屬個人愛好的單例使用方法。仁者見仁智者見智了,圖沒截完整。
NSAuthoritySingleton
4.NSAuthorityManager
顧名思義管理器,負責查看權限是否開啟以及相應的調用開啟方法。
NSAuthorityManager
以語音識別權限為例,Bool方法判斷是否開啟了語音識別的權限用于項目中進行判斷處理,
SFSpeechRecognizerAuthorizationStatus status = [SFSpeechRecognizer authorizationStatus];
if (status == SFSpeechRecognizerAuthorizationStatusNotDetermined) {
DLog(@"語音識別權限:未選擇權限(NotDetermined)");
return NO;
}else if (status == SFSpeechRecognizerAuthorizationStatusDenied){
DLog(@"語音識別權限:用戶拒絕App使用(Denied)");
return NO;
}else if (status == SFSpeechRecognizerAuthorizationStatusRestricted){
DLog(@"語音識別權限:未授權(Restricted)");
return NO;
}
DLog(@"語音識別權限:已授權(Authorized)"); //SFSpeechRecognizerAuthorizationStatusAuthorized
return YES;
void方法則用來開啟對應的權限
[SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
if (status == SFSpeechRecognizerAuthorizationStatusNotDetermined) {
DLog(@"語音識別開啟權限:未選擇權限(NotDetermined)");
}else if (status == SFSpeechRecognizerAuthorizationStatusDenied){
DLog(@"語音識別開啟權限:用戶拒絕App使用(Denied)");
}else if (status == SFSpeechRecognizerAuthorizationStatusRestricted){
DLog(@"語音識別開啟權限:未授權(Restricted)");
}else if (status == SFSpeechRecognizerAuthorizationStatusAuthorized){
DLog(@"語音識別開啟權限:已授權(Authorized)");
}
}];
調用方法
判斷是否開啟,如果未開啟則通過單例調用進行開啟操作。個別權限需要直接打開設置進行。則在manager文件里加入:
#define kStartProgramAuthority [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{UIApplicationOpenURLOptionUniversalLinksOnly:@""} completionHandler:^(BOOL success) { }];
即可。
演示效果
點擊按鈕調用權限
Demo地址
如果對你有幫助那真是太好了,我希望國內程序員做東西越來越走心。太餓了,溜了溜了,閑了再繼續完善。
來自:http://www.jianshu.com/p/63b6e513456c