Baidu Trace SDK modules for React Native(Android & iOS),百度地图鹰眼轨迹 React Native 模块
$ npm install @koppel/react-native-baidu-trace --save
cd ios && pod install
$ react-native link @koppel/react-native-baidu-trace
iOS 使用react-native link 目前有些问题。解决办法:libRNBaiduTrace.a和BaiduTraceSDK.Framework文件重新手动导入。
另外:如遇到项目报错image not found
,请尝试将项目TARGETS的General
下Frameworks,Libraries,and Embedded Content
的BaiduTraceSDK.Framework的Embed
选项改为Embed & Sign
,我尝试了按照网上的教程在Build Phases
下Link Binary With Libraries
将BaiduTraceSDK.Framework的Status
由默认的Required
改为Optional
,项目可以正常运行,但初始化是一直失败的。
如遇以下报错:
The linked library 'libPods-example.a' is missing one or more architectures required by this target: armv7/arm64.
,Product->Clean Build Folder之后再运行项目即可。
在Mainfest.xml正确设置AccessKey(AK),如果设置错误将会导致鹰眼服务无法正常使用。需在Application标签中加入以下代码,并填入开发者自己的 Android 类型 AK。AK申请方法参见申请密钥。
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" /> //key:开发者申请的Key
<!-- 以下是鹰眼SDK基础权限 -->
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入对象存储BOS数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!-- Android O之后开启前台服务需要申请该权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Android Q之后,后台定位需要申请该权限 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!-- Android O之后开启前台服务需要申请该权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<!-- Android Q之后,后台定位需要申请该权限 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<!-- 以下不是鹰眼SDK需要的基础权限,可选 -->
<!-- 用于加快GPS首次定位,可选权限,非必须-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!-- 用于Android M及以上系统,申请加入忽略电池优化白名单,可选权限,非必须-->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"></uses-permission>
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜@koppel/react-native-baidu-trace/RNBaiduTrace
and addRNBaiduTrace.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNBaiduTrace.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Run your project (
Cmd+R
)<
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.reactlibrary.RNBaiduTracePackage;
to the imports at the top of the file - Add
new RNBaiduTracePackage()
to the list returned by thegetPackages()
method
- Append the following lines to
android/settings.gradle
:include ':@koppel_react-native-baidu-trace' project(':@koppel_react-native-baidu-trace').projectDir = new File(rootProject.projectDir, '../node_modules/@koppel/react-native-baidu-trace/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:
compile project(':@koppel_react-native-baidu-trace')
import BaiduTrace, { BaiduTraceEventEmitter } from '@koppel/react-native-baidu-trace';
BaiduTrace.initService({
AK: '在百度注册的iOS AK', // iOS
serviceId: '在百度注册轨迹服务时的serviceId', // iOS & Android
entityName: '设备标识符', // iOS & Android
entityDesc: '设备描述', // iOS & Android
isNeedObjectStorage: false, // Android
keepAlive: true, // iOS
});
// 详细要求参阅百度鹰眼SDK文档
BaiduTrace.setGatherAndPackInterval(gatherInterval, packInterval);
BaiduTrace.startService();
BaiduTrace.stopService()
// startGather前请确保startSevise成功
BaiduTrace.startGather();
BaiduTrace.stopGather()
BaiduTrace.updateEntity({
[columnKey1]: [columnValue1],
[columnKey2]: [columnValue2],
...
});
支持下列事件:
监听器标志 | 含义 |
---|---|
BAIDU_TRACE_ON_START_TRACE | 开启追踪服务 |
BAIDU_TRACE_ON_STOP_TRACE | 停止追踪服务 |
BAIDU_TRACE_ON_START_GATHER | 开始收集定位信息 |
BAIDU_TRACE_ON_STOP_GATHER | 停止收集定位信息 |
BAIDU_TRACE_ON_UPDATE_ENTITY | 更新Entity |
BAIDU_TRACE_ON_BIND_SERVICE(only available on Android) | 绑定追踪服务 |
BaiduTraceEventEmitter.addListener(
'BAIDU_TRACE_ON_START_GATHER',
(result) => {
console.log('BAIDU_TRACE_ON_START_GATHER', result);
}
);
iOS14后的精度请求和百度iOS鹰眼轨迹SDK文档配置工程部分的iOS14.0 Beta 适配没有太理解。
-
iOS14后选择始终定位或允许在应用中定位时选择了精度之后是否一直都是选择的精度?
-
requestTemporaryFullAccuracyAuthorizationWithPurposeKey
检查是否只能放在locationManagerDidChangeAuthorization
方法中? -
如何能够及时的检查是否是高精度定位以及在非高精度定位时及时的请求高精度定位,从而保证应用尽可能多的时候是高精度定位?
望大佬们指点!