UNPKG

@poilabs-dev/vd-navigation-sdk-plugin

Version:

Official Expo Config Plugin for integrating the Poilabs Visually Disabled Navigation SDK

279 lines (189 loc) 7.44 kB
# Poilabs Visually Disabled Navigation SDK Plugin Official **Expo Config Plugin** for integrating the [Poilabs Visually Disabled Navigation SDK](https://www.poilabs.com/en/vd-navigation-sdk/) into Expo (prebuild) projects. > 🚀 Automatically links native dependencies and modifies required iOS/Android files. --- ## ✨ What this plugin does When used with `expo prebuild`, this plugin: - ✅ Adds required Android permissions to `AndroidManifest.xml` - ✅ Adds Poilabs VD Navigation SDK dependency to `android/app/build.gradle` - ✅ Adds JitPack repository to `android/build.gradle` - ✅ Adds `pod 'PoilabsVdNavigation'` to the iOS Podfile - ✅ Adds `use_frameworks!` to the iOS Podfile - ✅ Adds `Info.plist` keys for Location and Bluetooth usage - ✅ Creates necessary bridge files for iOS and Android --- ## 📦 Installation Install the plugin to your Expo project: ```bash npm install @poilabs-dev/vd-navigation-sdk-plugin # or yarn add @poilabs-dev/vd-navigation-sdk-plugin ``` ## ⚙️ Configuration Add the plugin to your `app.json` or `app.config.js`: ```json { "expo": { "plugins": [ [ "@poilabs-dev/vd-navigation-sdk-plugin", { "jitpackToken": "YOUR_JITPACK_TOKEN" // Get this from Poilabs } ] ] } } ``` Then run the prebuild command: ```bash npx expo prebuild ``` ### Additional Setup Required After running `expo prebuild`, you need to perform these additional steps: #### Android Setup 1. Find the `getPackages()` method and add the PoilabsPackage: ```kotlin override fun getPackages(): List<ReactPackage> { val packages = PackageList(this).packages // add this line packages.add(PoilabsPackage()) return packages } ``` 2. Clean and rebuild your Android project: ```bash cd android ./gradlew clean cd .. npx expo run:android ``` #### iOS Setup For iOS, you need to ensure the plugin files are properly included in your Xcode project: 1. Open your Xcode project 2. In Xcode, verify that the created files are added to your project: - `PoilabsVdNavigationManager.swift` - `PoilabsNavigationBridge.h` - `PoilabsNavigationBridge.m` 3. If files are missing, you may need to manually add them from the iOS directory 4. Ensure the Swift bridging header includes React and PoilabsVdNavigation ## 🚀 Upload Pods ```bash cd ios && pod install && cd .. ``` Then build and run your iOS project: ```bash npx expo run:ios ``` ## 🚀 Usage After the prebuild process, you can use the SDK in your application: ```javascript import { requestPermissions, startPoilabsNavigation, } from "@poilabs-dev/vd-navigation-sdk-plugin"; import React, { useEffect } from "react"; import {View } from "react-native"; export default function App() { useEffect(() => { async function initNavigation() { try { // Request permissions first const hasPermissions = await requestPermissions(); if (!hasPermissions) { return; } // Initialize the SDK const success = await startPoilabsNavigation({ applicationId: 'YOUR_APPLICATION_ID', // Get from Poilabs applicationSecretKey: 'YOUR_APPLICATION_SECRET', // Get from Poilabs uniqueId: 'USER_UNIQUE_ID', // A unique identifier for the user language: 'en', // or 'tr' for Turkish }); await showPoilabsVdNavigation(); } catch (error: any) { console.error("Error", error) } } initNavigation(); }, []); return ( <View></View> ); } ``` ## 📝 API Reference ### `startPoilabsNavigation(config)` Initializes the Poilabs VD Navigation SDK with the given configuration. #### Parameters - `config` (Object): - `applicationId` (String): The application ID provided by Poilabs - `applicationSecretKey` (String): The application secret provided by Poilabs - `uniqueId` (String): A unique identifier for the user - `language` (String, optional): Language code (e.g. "en", "tr"). Defaults to "en" - `configUrl` (String, optional): Optional URL to redirect requests #### Returns - `Promise<boolean>`: Resolves to `true` if SDK was initialized successfully, `false` otherwise ### `showPoilabsVdNavigation()` Shows the Poilabs VD Navigation interface. #### Returns - `Promise<boolean>`: Resolves to `true` if navigation started successfully, `false` otherwise ### `getUserLocation()` Gets the current user location. #### Returns - `Promise<Object>`: Resolves to location object with the following properties: - `latitude` (Number): Latitude coordinate - `longitude` (Number): Longitude coordinate - `floorLevel` (Number|null): Floor level (null if not available) ### `updateUniqueId(uniqueId)` Updates the unique identifier in the SDK after initialization. #### Parameters - `uniqueId` (String): New unique identifier for the user #### Returns - `Promise<boolean>`: Resolves to `true` if update was successful ### `requestPermissions()` Requests all the required permissions for the SDK to work properly. #### Returns - `Promise<boolean>`: Resolves to `true` if all required permissions are granted, `false` otherwise ### `checkPermissions()` Checks if all required permissions are granted. #### Returns - `Promise<boolean>`: `true` if all required permissions are granted, `false` otherwise ### `checkBluetoothPermission()` Checks if Bluetooth permissions are granted (relevant for Android 12+). #### Returns - `Promise<boolean>`: `true` if Bluetooth permissions are granted, `false` otherwise ## 📋 Required Permissions The plugin automatically adds these permissions: ### Android - `INTERNET` - For network communication - `ACCESS_FINE_LOCATION` - For precise location - `ACCESS_COARSE_LOCATION` - For approximate location - `BLUETOOTH`, `BLUETOOTH_ADMIN` - For Bluetooth functionality - `BLUETOOTH_CONNECT`, `BLUETOOTH_SCAN` - For Bluetooth on Android 12+ - `RECEIVE_BOOT_COMPLETED` - For autostart capability - `ACCESS_NETWORK_STATE` - For network connectivity ### iOS - `NSLocationUsageDescription` - Location permission - `NSLocationWhenInUseUsageDescription` - Location permission when app is in use - `NSLocationAlwaysUsageDescription` - Location permission even when app is not in use - `NSLocationAlwaysAndWhenInUseUsageDescription` - Location permission - `NSBluetoothAlwaysUsageDescription` - Bluetooth permission - `NSBluetoothPeripheralUsageDescription` - Bluetooth permission ## ❓ Troubleshooting ### Module not found error If you see `PoilabsVdNavigationModule` not found error: 1. Make sure you have run `npx expo prebuild` 2. Verify you've completed the additional setup steps for Android/iOS 3. Run `npx expo run:android` or `npx expo run:ios` to build and run the native project 4. For Expo Go, this plugin will not work because it requires native modules ### iOS Integration Issues If you're having issues with iOS integration: 1. Make sure the Podfile is correctly updated with `pod 'PoilabsVdNavigation'` 2. Verify that `use_frameworks!` is in your Podfile 3. Check that the Swift files are properly added to your project 4. Run `pod install --repo-update` from the ios directory ### Permission issues If the SDK is not working due to permission issues: 1. Make sure you have requested all the necessary permissions 2. For Android, ensure Bluetooth permissions are properly granted on Android 12+