iT 邦幫忙鐵人賽 Day 22: 再次向使用者請求開啟功能的權限。
當我們使用者再次進入需要權限的畫面,就在發出一次請求吧!
前言:
我們經常在開發 App 碰到需要要求使用者允許使用權限才能實作的功能,例如:地圖定位、相機應用或是推播通知,如果使用者沒有授權給我們,那麼他將無法使用這些需要授權的應用。那假如使用者第一次無意間按到不允許開放權限,又或是之後想要開啟需要權限的功能,那麼這時當使用者再次進入畫面時,我們就該再次詢問他是否要開啟功能。
#權限判斷
首先我們需要判斷使用者是否允許該功能的權限,這邊我要判斷使用者的在開啟掃描 QR Code 的畫面時,是否允許相機權限,所以在這邊我們會透過 authorizationStatus(for:)
這個方法的回傳的 AVAuthorizationStatus
來判斷,一共有以下四種的回傳值。
#AVAuthorizationStatus
.notDetermind
:媒體捕獲需要明確的使用者權限,但用戶尚未允許或拒絕此權限。.restricted
:使用者不允許訪問媒體捕獲設備。.denied
:使用者明確的拒絕媒體捕獲的權限。.authorized
:使用者明確的允許媒體捕獲權限,或者對於相關媒體類型不需要明確的使用者權限。
當使用是者允許相機訪問權限時,那麼 AVAuthorizationStatus
就等於 .authorized
,所以我們現在需要對 .authorized
以外的情況去執行請求訪問相機的權限,所以我們會用 requestAccess(for:completionHandler:)
方法來訪問使用者,所以我們整體的程式碼如下:
所以當我們第一次開啟 App 沒有允許時,那麼進入條碼掃描的頁會出現:
這時候我們按下設定就會跳到關於這個 App 的設定,就可以設定關於這個 App 的權限或是其他設定:
後記:
透過這次教學後,我們就能夠去避免使用者第一次誤觸權限按鈕,按到不允許的狀況,如此一來我們就能夠很彈性的讓使用者自己開啟或關閉訪問的權限,當然我們這個 App 中的定位功能也能透過類似的方式實作,只是在這個 App 中我們不太需要用到,那麼我們這次的教學就到這邊結束了,下次再見~