在Android项目中(百度地图),报错:key验证出错,请在AndroidManifest.xml文件中检查key设置

来源:互联网 发布:淘宝旺旺头像 编辑:程序博客网 时间:2024/06/05 10:13

在Android项目中(百度地图),报错:key验证出错,请在AndroidManifest.xml文件中检查key设置


首先,了解下什么是230错误:

为增强移动APP对百度开发SDK/API服务访问的控制,也避免恶意开发者对百度地图服务进行攻击,我们对Mobile类型(Android/IOS)的服务请求进行了安全码校验;所谓安全码即开发者在API控制台申请AKAKAPP一一对应)时提供的APP签名的SHA1+”;”+包名

(具体可参考http://developer.baidu.com/map/index.php?title=androidsdk/guide/key)。

请求服务必须要携带该安全码作为参数,不携带或者携带不一致的安全码给服务端,均会返回230错误。

一般的解决方式: 

 查看一下APP当前签名的SHA1值(注意不是MD5)和包名,然后去API控制台把查看该AK对应配置的安全码是否和           APP实际的一致

 如果检查后数字签名、包名、API_KEY没错的话,就是下面说的第二种问题了。


总结下:

出现

baidumapsdk: Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败

的可能有两种

【1】AK错误 :那么就检查你的数字签名和包名有没有弄错

                          (我的检验后证明不是第一种错误)

        

【2】签名文件没有打包到程序

  菜单栏选择 file -> project structure,选择应用的modules

改以下三处: 
1. signing选项卡,新增一个 config , 加完后填入你的key file的alias(别名)、 password(密码)、存储文件的位置等信息。

2.flavors选项卡,里面的 signing config 选择你刚新加的 config 

3.build types选项卡,里面的 debug 或 release, 都将 Signing Config 选择位新增加的config

这样每次debug出来的apk,就自带签名了



                                                                               还有下面错误的:




以下列举目前反馈较多的一些问题

1.  同样的key和key的配置,同一个打包的app,有的手机上key验证成功,有的手机上key验证失败?
:只要存在key验证成功的情况,key和key的相关配置都是正确的,不要再更换key或者修改key的配置,请从手机系统或者网络环境上检查原因。
推荐解决方法
        A. key验证当前系统日期和时间,手机系统日期和时间是否正确。请先将日期时间调整为当前时间或者设置为自动网络获取。
        B. key验证赖网络通信,确认网络是否可用。请先在手机上使用浏览器访问网页测试网络是否连通。

2.    正常打包后安装app,app中key验证成功,调试app的时候,key验证失败?
说明:同样的app已经验证成功,说明此app的key是正确的不要再更换key或者修改key的配置问题出在调试环境上,请从调试环境上检查原因。
推荐解决方法
        A. key验证https方式的网通信,确认app的调试环境中是否有破坏https环境的因素。比如很多开发者在调试过程中,同时打开http或者https的抓包工具(Fiddler等),这种抓包工具会引起https的证书验证等一系列验证问题,导致key验证中网络交互失败,这种情况下,请关闭抓包工具后调试。

3.    直接连2/3/4G移动网络时key验证成功,连接wifi时key验证失败?
说明:key的验证需要通过https://api.map.baidu.com访问百度服务器。
推荐解决方法:
        A. 如果wifi使用了网络代理服务器,请确认代理服务器支持https通信,并且确认能够通过域名api.map.baidu.com访问。

4.    是否支持完全离线的key验证?
说明:key验证必须联网验证,不支持离线验证,联网服务器为https://api.map.baidu.com
推荐解决方法
        A. 如果是使用限定的定向域名访问网络,请将api.map.baidu.com域名加入网络访问的白名单。

5.    定位SDK中可能出现第一次定位成功,后续均返回505错误。
说明:为了保证定位效率,定位和key验证是同时进行的,很有可能定位先处理完,所以在key验证错误的消息还未收到时已经显示定位成功了。此时说明key的配置肯定是错误的,所以请正确配置key
推荐解决方法
        A. 按照官方配置文档,仔细检查key的配置


6.    定位SDK并只使用GPS模式(不联网)定位返回505错误。
说明:定位SDK需要联网进行key验证,如果使用定位SDK而不使用网络定位(或者不开启网络),仅使用GPS定位的话,使用系统的定位接口即可




                                             还是不知道怎么做请看下面:

常见问题解决方法汇总?请参考:key验证常见问题总结
如何获取SHA1?详细的方法请参考Android Studio 和 Eclipse 中获取SHA1详解
如何获取AK或者key?详细的方法请参考官方教程

鉴于Android版SDK中出现的大量key验证失败问题,基本上都是在API控制台申请AK的时候填写的

包名或者SHA1不正确导致的(包名或者SHA1的获取详见官方教程)。搜索log,若出现"Authentic

ation Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败",则认真阅读下面的内

容。


如果想快速解决验证问题,可以使用下面提供的安全码校对工具获取APP正确的包名和SHA1值,并将这两个值更新到API控制台对应的AK上即可。安全码校对工具  MCodeCheck.zip (363.22 KB, 下载次数: 4152)

打开应用后,找到自己开发的APP(默认最新安装的APP排在最上面),点击后会弹出对话框显示包名和

SHA1值。

 
打开API控制台,将上面显示的包名和SHA1值更新到对应的ak中即可(注意:在填入SHA1和包名的时候不能带有空格)。


 特别注意:已经上线发布的APP中使用的AK不要轻易更新,否则可能会导致已

发布的APP鉴权失败。

详细的获取SHA1方法参考:Android Studio 和 Eclipse 中获取SHA1详解

区分debug版和release版签名文件打包的开发者特别注意:

很多开发者都有debug版和release版签名文件分别进行apk打包,如果你此刻安装的app是debug版签名

文件打包的,此处获取到的就是debug版的SHA1;相反如果你安装的app是release版签名文件打包的,

此处获取到的就是release版的SHA1。API控制台中debug版签名文件对应的SHA1值填入"开发版SHA

1"中;同理,release版签名文件对应的SHA1值填入"发布版SHA1"中,这样能保证开发和测试的时候使

用同一个AK即可

debug版签名文件:是指在开发过程中从Android Studio或者Eclipse中直接调试运行的apk使用的签名文件,一般是开发工具自动处理的。
release版签名文件:是指在提交测试或发布时候,选择指定的签名文件进行打包的签名文件,一般同一个APP使用一个统一的签名文件。


进一步解析什么师230错误:让大家明白点:

1.什么是230错误

为增强移动APP对百度开发SDK/API服务访问的控制,也避免恶意开发者对百度地图服务进行攻击,我们对Mobile类型(Android/IOS)的服务请求进行了安全码校验;所谓安全码即开发者在API控制台申请AKAKAPP一一对应)时提供的APP签名的SHA1+”;”+包名(具体可参考http://developer.baidu.com/map/index.php?title=androidsdk/guide/key)。

请求服务必须要携带该安全码作为参数,不携带或者携带不一致的安全码给服务端,均会返回230错误。



2.如何解决230错误


目前我们发现主要是Android类型的APP存在该参与错误,安全码是sdk自动从APP配置中获取的,开发者无需自己填写。当出现230错误时,请开发者先查看一下APP当前签名的SHA1值(注意不是MD5)和包名,然后去API控制台把查看该AK对应配置的安全码是否和APP实际的一致,如果不一致请去API控制台手动修改一致即可~~


再说一下出现这些的原因是是什么?


原因一:AK错误 
仔细检查一下你的应用中使用的AK是否正确,和生成该AK的数字签名(SHA1)、包名是否跟你当前的程序一致。 
如图是我获取的用来测试的AK: 
这里写图片描述

生成该AK的数字签名和包名如下: 
这里写图片描述

如果不正确就重新申请AK,我仔细检查了一下,我的AK是正确的,那么就有可能是第二个原因了。

原因二:签名文件没有打包到程序中 
因为我调试的时候直接使用run来进行编译与执行,但这时并没有把key file打包进去,所以会出现错误。 
如我的 签名文件的位置是:C:\Users\yu.android\debug.keystore 
密码是:android

步骤如下: 
菜单栏选择 file -> project structure,选择应用的modules(如果当前只有一个应用那么只会显示app),修改以下三处: 
1. signing选项卡,新增一个 config , 加完后填入你的key file的alias(别名)、 password(密码)、存储文件的位置等信息。如图 
这里写图片描述 
2.flavors选项卡,里面的 signing config 选择你刚新加的 config 
3.build types选项卡,里面的 debug 或 release, 都将 Signing Config 选择位新增加的config

这样每次debug出来的apk,就自带签名了

还有一些其他的小原因,如 : 
1)检查你的网络连接是否正常, 
2)AndroidManifest文件是否进行权限的申请, 
3)AK是否有正确进行了配置

<application>      <meta-data          android:name="com.baidu.lbsapi.API_KEY"          android:value="8w*******bGy3xz6h6Y7C" />  </application>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

承上所述,我的问题是这样解决的,不知道是否能帮(wu)到(dao)各位看官。

之前在搜索这个问题的时候,对某贴吧中有个人提出的几个点表示非常赞同 
1)、在Android studio中,so文件应该放在src/main/jniLibs/armeabi/或者armeabi-v7a等中,而不是src/main/jniLibs/里(百度开发者中心的文档上介绍的时候是放置在jniLibs里的); 
2)、百度地图操作中心点的类是MapStatus,不再是MapController; 
3)、定位图标应绘制在定位图层上,而不是标注图层(标注图层上的mark点在移动地图的时候有飘移现象); 
4)、android sutio在直接run的时候,安装在手机里的是debug版本,所以在测试的时候不能用release版的SHA1。


还是不能解决或许这一种方法可以救你!


问题出现场景

1,按照官方文档提示,进行环境搭建,在虚拟机上试跑。程序界面报错:“key验证出错!错误码230;...”

这里写图片描述

解决方案

1,把C:\Users\XXXX(看自己机器具体情况)\.android文件夹下的debug.keystore文件复制到项目中。2,具体复制到:项目/app文件夹下。(Project视图下)如果提示已有,就覆写。3,运行。成功。

这里写图片描述



(初始化失败也有可能是开发者平台中的配置没配置好(SHA1值和应用包名))

★解决:查看libs-armeabi-v7a文件夹中是否含有文件,armeabi-v7a中的文件有可能 会对百度导航sdk冲突,删除该文件

(另:

导航如果没有语音:

1.确认是否注册白名单http://app.navi.baidu.com/ttsregister/appinfo

2.确认asserts文件中是否含有BaiduNaviSDK_Resource_2.0.png和channel两个文件

3.确认libs-armeabi中是否含有libbd_etts.so文件,可到http://lbsyun.baidu.com/sdk/download下载;

项目集合时,百度地图各个功能的库冲突:

解决:到http://lbsyun.baidu.com/sdk/download下载整合后的库



实在不行进     最后一波详细的教你注册获取key    这样也许就可以了。


Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key

申请密钥


http://developer.baidu.com/map/index.php?title=androidsdk/guide/key#.E7.94.B3.E8.AF.B7.E6.AD.A5.E9.AA.A4



1:

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.







0 0