uniappx开发Android百度地图插件时,报错The location function has been stopped because you do not agree with the privacy compliance policy. Please recheck the setAgreePrivacy interface。
【安卓直接使用百度地图同理,也是会报这个错误,解决方法是一样的!!】
查询官方文档之后才发现再使用之前需要调用setAgreePrivacy
解决方案:为了进一步加强对最终用户个人信息的安全保护措施,从定位SDK v9.2.9版本起,请开发者务必确保调用SDK任何接口前先调用隐私合规接口setAgreePrivacy,否则可能会无法正常使用相关功能。如下:
LocationClient.setAgreePrivacy(true);
我在uniappx中实现的方式是:
/**
* 更多插件开发的信息详见:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html
*/
export class AppHookProxy implements UTSAndroidHookProxy {
override onCreate(application : Application) {
// java
// 是否同意隐私政策,默认为false,但是必须设为true
SDKInitializer.setAgreePrivacy(UTSAndroid.getAppContext(), true);
//需要加上这句定位是同意隐私合规接口,否则定位时会报错!!!
LocationClient.setAgreePrivacy(true);
UTSAndroid.setPrivacyAgree(true)
try {
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(UTSAndroid.getAppContext());
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
//当前应用是否 取得用户同意隐私协议
if (UTSAndroid.isPrivacyAgree()) {
//onCreate 初始化三方SDK
console.log("AppHookProxy--onCreate---isPrivacyAgree")
Log.e("AppHookProxy", "AppHookProxy--onCreate---isPrivacyAgree")
}
} catch (e : BaiduMapSDKException) {
console.log("AppHookProxy BaiduMapSDKException", e)
}
}
}
同理,高德地图也需要设置,我这里只举出uniappx中的实现【和原生安卓调用的api是一样的】,如下:
/**
* 更多插件开发的信息详见:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html
*/
export class AppHookProxy implements UTSAndroidHookProxy {
override onCreate(application : Application) {
console.log("GDAppHookProxy", "AppHookProxy--onCreate---", UTSAndroid.isPrivacyAgree())
// 确保调用SDK任何接口前先调用更新隐私合规updatePrivacyShow、updatePrivacyAgree两个接口并且参数值都为true,若未正确设置有崩溃风险
AMapLocationClient.updatePrivacyShow(UTSAndroid.getAppContext()!, true, true);
AMapLocationClient.updatePrivacyAgree(UTSAndroid.getAppContext()!, true);
}
}