Native Permissions Checklist
Quick reference for all native permissions required by host apps integrating the Eixam SDK.
The SDK uses shared_preferences for lightweight local persistence. It requires no extra Android Manifest permissions and no extra iOS Info.plist keys. Data is stored inside the app sandbox managed by Android/iOS.
Capability map
| Capability | Bluetooth | Foreground location | Notifications | Background location |
|---|---|---|---|---|
| Device pairing and commands | Required | Platform-dependent for BLE discovery | No | No |
| OTA firmware update | Required | Same prerequisites as connected-device operation | Recommended for visible runtime status | No new requirement |
| LoRa radio-region detection/apply | Required | Required to resolve the current country | No | Not required for a foreground check |
| SOS with location | Device path only | Required for current phone/device position | Recommended | Depends on product/runtime mode |
| Protection Mode/background telemetry | Required when device-backed | Required | Required for foreground/runtime notifications | Required only when the product enables continuous background location |
- Android (Manifest)
- iOS (Info.plist)
Android — AndroidManifest.xml
Add these top-level permissions to your <manifest> tag:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- Bluetooth / BLE -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- Optional: Background Tracking -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Android Recommendations
- Android 13+:
POST_NOTIFICATIONSis mandatory for system alerts. - Android 12+:
BLUETOOTH_SCANandBLUETOOTH_CONNECTmust be declared. - Notification Icon: Ensure a monochrome notification icon is available at
@mipmap/ic_launcheror similar.
iOS — Info.plist
Add these keys to your Info.plist dictionary:
<key>NSLocationWhenInUseUsageDescription</key>
<string>EIXAM uses your location for SOS, safety tracking, and country-specific device radio settings.</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>EIXAM needs Bluetooth access to pair and communicate with the safety device.</string>
<!-- Optional: Background Features -->
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>EIXAM may need location in background for continuous safety tracking.</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
<string>bluetooth-central</string>
</array>
iOS Recommendations
- Bluetooth Description: Even if the SDK requests permission, Apple requires the usage description key to be present in the host app.
- Background Modes: Only include
locationorbluetooth-centralif your app logic genuinely requires background continuity.
Runtime responsibilities
The SDK abstracts the platform-specific request flows, but the host app owns the initial declaration.
| Responsibility | Owner | SDK Method |
|---|---|---|
| Declare native permissions | Host app | N/A |
| Location permission | SDK | requestLocationPermission() |
| Notification permission | SDK | requestNotificationPermission() |
| Bluetooth permission | SDK | requestBluetoothPermission() |
| Notification copy | Host app | EixamBootstrapConfig.notificationTexts |
Permission disclosure preflight
For user-friendly and store-compliant permission UX, inspect the SDK preflight before showing a native prompt:
const requirement = EixamPermissionRequirement.nearbyDevicesBluetooth(
featureKey: 'device_pairing',
);
final preflight = await sdk.preparePermissionPreflight(requirement);
if (preflight.requiresDisclosure) {
final accepted = await showPermissionExplanation(preflight.disclosure!);
if (!accepted) {
await sdk.declinePermissionDisclosure(requirement);
showLimitedFeatureMessage(preflight.limitedFeatureMessage);
return;
}
await sdk.acceptPermissionDisclosure(requirement);
}
await sdk.requestBluetoothPermission();
Customize EixamBootstrapConfig.permissionDisclosureConfig with approved localized product copy. The host renders the disclosure; the SDK returns the correct next native action and limited-feature message.
OS SOS widget setup
OS-level SOS widgets add native setup requirements, not a new SDK runtime permission category.
- Android widget registration does not add dangerous runtime permissions by itself. The host app still needs normal SDK permissions when the widget activation enters SOS, location, notification, Bluetooth, or background flows.
- iOS WidgetKit integrations require host-app setup such as a WidgetKit extension, App Group entitlement for display-only snapshots, and URL scheme or deep-link handling.
- Widget snapshots should be treated as display-only and reviewed before exposing sensitive status text.
See OS SOS Widget for guarded activation requirements.