Permissions
The module collects data from the user's device according to the permissions available at collection time: the more permissions your application requests and the user grants, the more information is collected from the user's device.
The INTERNET permission is mandatory for the SDK to be able to send the information to QI Tech's servers.
Our module does not request the permissions described here. Therefore, to ensure a more complete device scan, we recommend collecting these permissions before calling startDeviceScan.
Android
On the Android platform, the following permissions are used if available:
| Permission | Purpose | Required |
|---|---|---|
| INTERNET | Mandatory, to send the information to QI Tech's servers. | Yes. |
| BLUETOOTH | Collection of Bluetooth hardware information. | No. |
| BLUETOOTH_CONNECT | Collection of Bluetooth connection information. Required from Android 12 (API 31) onwards. | No. |
| READ_CONTACTS | Reading the contact list. | No. |
| ACCESS_COARSE_LOCATION | Access to network information (Antenna, carrier...) and to the location through it (less precise). | No. |
| ACCESS_FINE_LOCATION | Access to the location through GPS (more precise). | No. |
| READ_PHONE_STATE | Network, SIM, IMEI and other telephony information. | No. |
| QUERY_ALL_PACKAGES | Information about applications installed on the device. Required for Android 11 devices onwards. | No. |
The QUERY_ALL_PACKAGES permission may cause friction with Google Play when releasing the app. To resolve it, you can describe the reason for requesting the permission.
Requesting the permissions
import { Platform, PermissionsAndroid, Permission } from 'react-native';
const permissionsToRequest: Permission[] = [
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE,
PermissionsAndroid.PERMISSIONS.READ_CONTACTS,
];
// BLUETOOTH_CONNECT is only needed on Android 12+ (API 31+)
if (Platform.Version >= 31) {
permissionsToRequest.push('android.permission.BLUETOOTH_CONNECT' as Permission);
}
const results = await PermissionsAndroid.requestMultiple(permissionsToRequest);
iOS
On the iOS platform, the following permission is used if available:
- location - Collection of the device's geolocation data
Info.plist file
The first step to make permissions available to the module is to configure the permission in the application's Info.plist file:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Add the message you want to show the user when iOS requests the geolocation access permission</string>
To improve the user experience when permissions are requested, you should customize the message shown in the request pop-up as described above.
Requesting the permissions
import { request, PERMISSIONS, RESULTS } from 'react-native-permissions';
const result = await request(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE);
if (result === RESULTS.GRANTED) {
// permission granted
}
Information collection
For the full list of information collected on each platform, see the native SDK collection pages: