@secretarium/react-native-ble

Secretarium BLE component for C3PO. This component aims are providing Bluetooth LE advertising (peripheral) and scanning (central) for react-native. It it coded in Kotlin for Android and Swift for iOS.

Usage no npm install needed!

<script type="module">
  import secretariumReactNativeBle from 'https://cdn.skypack.dev/@secretarium/react-native-ble';
</script>

README

@secretarium/react-native-ble

Secretarium BLE component for C3PO. This component aims are providing Bluetooth LE advertising (peripheral) and scanning (central) for react-native. It it coded in Kotlin for Android and Swift for iOS.

The original motivation for this package was the creation of a proof-of-concept and technological demonstration in confidential computing privacy-first application for mitigation of population risk in the dawn of the Covid-19 crisis.

The current package supports the following:

  • Android Peripheral (Advertiser)
  • Android Central (Scanner)
  • iOS Peripheral (Advertiser)
  • iOS Central (Scanner)

Limitations

There are multiple mismatch and OS limitations to the component's functioning on both implementations. This is because Android doesn't offer cutomised complete local name advertising by default (https://android.googlesource.com/platform/packages/apps/Bluetooth/+/master/src/com/android/bluetooth/gatt/AdvertiseHelper.java#43) and iOS doesn't permit tranditional named advertising in background apps (https://developer.apple.com/documentation/corebluetooth/cbperipheralmanager/1393252-startadvertising).

Installation

yarn install @secretarium/react-native-ble

Setting up the Android Project

In AndroidManifest.xml, add Bluetooth permissions and update :

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="...">
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    ...
</manifest>

Setting up the iOS Project

On your Info.plist file, include:

<dict>
    ...
    <key>NSBluetoothAlwaysUsageDescription</key>
    <string>We uses Bluetooth to scan other beacons around.</string>
    <key>UIBackgroundModes</key>
    <array>
        <string>bluetooth-central</string>
        <string>bluetooth-peripheral</string>
        ...
    </array>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
        <string>bluetooth-le</string>
        ...
    </array>
</dict>

Usage

import C3POReactNativeBle from "@secretarium/react-native-ble";

await C3POReactNativeBle.setManufacturerId(0xFFFF);

License

MIT