react-native系列(19)API篇:請求系統權限(相冊等)

在舊版本,要獲取設備權限(如讀寫權限等)直接在項目中配置即可,無需過問app用戶。在新版本的API中,出於安全考慮,要獲取設備的相應權限需要通過權限請求,用戶通過之後纔可以獲取權限,android和ios的獲取權限方式不同。

android權限

官方提供了PermissionsAndroid來獲取權限,以獲取WRITE權限爲例,看如下代碼:

UNSAFE_componentWillMount() {
    this.requestReadPermission();
}

async requestReadPermission() {
    try {
        const os = Platform.OS; // android or ios
        if(os === 'android'){
            const granted = await PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
                {
                    //第一次請求【拒絕】後提示用戶你爲什麼要這個權限
                    'title': '我要讀寫權限',
                    'message': '沒權限我不能工作,同意就好了'
                }
            );
            if (granted === PermissionsAndroid.RESULTS.GRANTED) {
                console.log('你已獲取了讀寫權限');
                // 繼續運行其它代碼
            } else {
                console.log('獲取讀寫權限失敗');
            }
        }else{
            console.log('你已獲取了讀寫權限');
            // 繼續運行其它代碼
        }
    } catch (err) {
        console.log(err.toString());
    }
}

PermissionsAndroid支持的權限類別可以到官網查看,這樣在用戶首次啓動app時將會收到讀寫權限的請求詢問。除此之外,最好還要在android/app/src/main/AndroidManifest.xml配置上

// 這裏你需要什麼權限就配置什麼權限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

ios權限

ios配置權限較複雜,以常用的獲取相冊的讀寫權限爲例,需要鏈接RCTCameraRoll庫(也有部分權限只需配置Info.plist即可,視官方RN庫支持程度而定)。

(1) 進入到工程項目中的 node_module/react-native/Libraries/CameraRoll

(2) 把 RCTCameraRoll.xcodeproj 添加到在項目工程的 Liberaries 文件夾下

(3) 在 Build Phases -> Link Binary With Libraries 裏添加 libRCTCameraRoll.a

(4) 由於蘋果安全策略更新,還需要在 Info.plist 配置請求照片相的關描述字段(Privacy - Photo Library Usage Description

這樣,就可以在程序中使用讀寫權限了,以相冊爲例:

CameraRoll.getPhotos(...) // 獲取相冊照片或視頻
CameraRoll.saveToCameraRoll(...) // 保存照片或視頻

關於CameraRoll用法,將在下篇中詳解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章