reportLocation

概述

reportLocation 封装了将定位坐标上报给指定服务器的相关接口,本插件定位功能是集成的百度地图移动端定位开放 SDK,所以插件获取到的坐标也是属于百度地图坐标系。百度地图移动端定位 SDK 免费对外开放,接口使用无次数限制。在使用前,需先申请密钥(ak)才可使用。任何非营利性应用请直接使用,商业目的产品使用前请参考 使用须知。在您使用百度地图移动端定位 SDK 之前,请先阅读 百度地图API使用条款

本插件最大的特点是,开发者可自定义设置定位精度以及上报服务器时间间隔。亦可自定义设置上报数据的请求头信息,详情请参考插件接口参数。 开发者使用本插件之前需先去 百度地图开放平台 申请开发者账号,创建自己的 APP 从而获取 ak,本插件所需的 ak 与 baiduMap、bMap、baiduNavigation 插件等百度开放 SDK 相关的插件所需的密钥可以相同。

注意:

1. 使用此插件之前必须先配置 config 文件


针对 iOS 平台配置方法:

  • 名称:reportLocation
  • 参数:apiKey
  • 配置示例:
  <feature name="reportLocation">
    <param name="ios_api_key" value="百度ak" />
  </feature>

针对 android 平台配置方法:

  • 配置示例:
 <meta-data
     name="com.baidu.lbsapi.API_KEY"
     value="百度ak" />

2. 后台定位上报功能

由于系统限制,在 iOS 平台上,定位功能必须在 app 为当前激活使用状态或后台运行状态时才能正常运行。所以若要集成后台定位功能,必须得配置 config 文件 以申请后台运行权限,然后应用打包或自定义 loader 方可正常使用。配置实例如下:

//配置一个后台定位功能:
<preference name="backgroundMode" value="location"/>

//配置多个后台运行功能,各值之间用竖线 | 隔开:
<preference name="backgroundMode" value="location | audio"/>

注意事项:

  • 1、Android从1.0.9版本开始,需用升级环境编译

插件接口

setAgreePrivacy

是否同意隐私政策,只有同意隐私协议后才能使用插件相关功能;请务必同意该接口,隐私政策可参考百度地图官网

setAgreePrivacy({params})

params

agree:

  • 类型:布尔类型
  • 描述:是否同意

示例代码

var reportLocation = api.require('reportLocation');
reportLocation.setAgreePrivacy({
    agree:true
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

startLocation

开始定位并上报指定服务器

startLocation({params}, callback(ret, err))

params

accuracy:

  • 类型:字符串
  • 描述:(可选项)定位精度,信号不稳定时,定位精度过高,在 iOS 平台上会偶现定位失败的问题
  • 默认值:device_sensors
  • 取值范围:
    • battery_saving:低功耗模式(android端),iOS端对应的是3km
    • device_sensors:仅设备(Gps)模式(android端),iOS端对应的是100m
    • hight_accuracy:高精度模式(android端),iOS端对应的是10m

filter:

  • 类型:数字
  • 描述:(可选项)位置更新所需最小距离(单位米)
  • 默认值:1.0

enableLocInForeground:

  • 类型:布尔类型
  • 描述:(可选项) 开发者应用如果有后台定位需求,在退到后台的时候,为了保证定位可以在后台一直运行,可以设置为true,适配android 8后台无法定位问题,其他版本下也会提高定位进程存活率(ios不支持)
  • 默认值:false

notification:

  • 类型:JSON对象
  • 描述:(必选项) 通知栏的提示,此字段只有在enableLocInForeground设置为true时有效。(百度为了app能够在后台持续定位,就得需要开启一个前台服务,要开启一个前台服务就得开启通知栏提示)(ios不支持)
  • 内部字段:
{
    id : 1,   //(必选项) 数字类型;为通知栏notifation设置唯一id,必须大于0
    contentTitle :  //(必选项) 字符串类型;标题
    contentText:    //(必选项) 字符串类型;内容
}

autoStop:

  • 类型:布尔
  • 描述:(可选项)获取到位置信息后是否自动停止定位
  • 默认值:true

report:

  • 类型:JSON 对象
  • 描述:(可选项)当 autoStop 为 false 时,本参数表示将当前位置信息上报的配置,若 autoStop 为 true,则本参数无意义。
  • 内部字段:
{      
    url: '',          //字符串类型;要上报的服务器地址,支持 http、https 协议
    uid: '',          //字符串类型;上报数据时携带的用户id(用于服务器端唯一标识用户)
    interval:         //(可选项)数字类型;将当前位置信息上报给指定服务器间隔时间,单位为妙(s);默认:30
    type: 'post',     //(可选项)字符串类型;上报的方式;默认值:post;
                      // 取值范围如下:
                      // post:将位置信息 post 到服务器
                      // get:将位置信息以 get 的形式发送给服务器; 注意:get请求数据会追加到url之后,并且数据被URL编码;格式如下:url?data=(url编码数据)
    headerField: {    //(可选项)JSON对象;当 type 为 post 时,本参数表示设置请求头信息
       //本参数的内容格式为:key:value,如下demo:
       timestamp: '12345677890',//如果检测到有 key 为 timestamp 则插件会在每次上报时获取当前时间戳作为 timestamp 的 value 设置给本次 post 请求的请求头信息
       ContentType: 'text/plain',
       custid: '123456',
       Accept: '*/*'      
    },
    aesKey: ''       //(可选项)字符串类型;是否将 post 的数据进行 AES 加密,若不传则不加密,若本字段有值则进行 AES 加密,加密模式和填充模式分别为:CBC/PKCS7Padding;初始iv为:{0xA,1,0xB,5,4,0xF,7,9,0x17,3,1,6,8,0xC,0xD,91}
}

上报的数据格式如下:

{
    loc: {                    //JSON对象;上报的当前位置信息
        lon: 116.213,         //数字类型;经度
        lat: 39.213           //数字类型;纬度
    },
    uid: '',                  //字符串类型;开发者自定义的用户id(通过startLocation接口传给插件)
    accuracy: 65,             //数字类型;本次定位的精度,仅支持 iOS 平台
    timestamp: 1396068155591  //数字类型;定位此位置信息时的时间戳
}

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
{
    status: true,             //布尔类型;操作成功状态值,true|false
    loc: {                    //JSON对象;当前位置信息
        lon: 116.213,         //数字类型;经度
        lat: 39.213,          //数字类型;纬度
    },
    accuracy: 65,             //数字类型;本次定位的精度,仅支持 iOS 平台
    timestamp: 1396068155591  //数字类型;定位的时间戳
}

示例代码

var reportLocation = api.require('reportLocation');
reportLocation.startLocation({
    accuracy: 'battery_saving',
    filter: 100,
    autoStop: false,
    report: {
        uid: '123456789',
        url: "https://",
        interval: 30,
        type: 'post',
        headerField: {
           timestamp: '',
           ContentType: 'text/plain',
           custid: '123456',
           Accept: '*/*'
         }, 
         aesKey: 'apicloud'
    }
}, function(ret) {
    if (ret.status) {
        api.alert({ msg: JSON.stringify(ret) });
    } else {
        api.alert({ msg: '定位失败' });
    }
});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

stopLocation

停止定位,当调用 startLocation 接口时 autoStop 参数传 false,则调用本接口可停止定位功能

stopLocation()

示例代码

var reportLocation = api.require('reportLocation');
reportLocation.stopLocation();

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

是否仍需要帮助? 请保持联络!
最后更新于 2024/10/21