最友好的訪問權限之iOS權限提示

783337934 7年前發布 | 19K 次閱讀 語音識別 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地址

GitHub

如果對你有幫助那真是太好了,我希望國內程序員做東西越來越走心。太餓了,溜了溜了,閑了再繼續完善。

 

來自:http://www.jianshu.com/p/63b6e513456c

 

 本文由用戶 783337934 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!