在React Native處理Permissions

2018/3/18 posted in  React Native comments

在Apps上取用user的資料或硬件前,都必先得到user的同意(Permission)。但iOS和Android的取得都不同,所以在React Native上要小心處理。

I. React Native

iOS

在初次取用某些需要permission的module時,會彈出dialog問user是否批准。

例如想獲取user的locationnavigator.geolocation.getCurrentPosition()時,會在第一次的時候先問user,再視情況返回success callback或error callback。

同時需要在info.plist裡加入相關的dialog message,例如有關location的NSLocationWhenInUseUsageDescription,裡面要清楚解釋為甚麼要用user的位置,否則有機會因此被Apple reject你的app。

Android

Android的情況比較複雜。

以前的Android一向是在安裝時列明所需權限,不用之後逐一問的。但自API >= 23開始,Android也改為runtime問user了。

API < 23

AndroidManifest.xml裡加入所需permissions。

API >= 23

使用PermissionsAndroid module。

相關工具

react-native-permissions

II. Expo

Expo是一個讓你可以用 pure javascriptcross-platform apps 的工具,它會幫你處理好native相關的東西,例如compile成.apk和.ipa、code push等等。

取用permissions

Expo提供Permission module,可以查看permission狀態,也可以問user獲取permissions,非常方便。

Configuration

簡單來說:

  1. 在app.json加入permission dialog message (for iOS)
  2. 在app.json加入所需permissions (for 舊Android)
  3. 使用Permission API取得使用權

app.json configuration

Supporting permissions

Notes: Push notification

Push notification permission is a special case, unlike others like camera, location, etc.

iOS

  • Ask permission in runtime
  • Cannot customize permission dialog message

Android