您的位置:首页 > 移动开发 > Android开发

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

2016-12-19 23:47 831 查看
在Android项目中(百度地图),报错:key验证出错,请在AndroidManifest.xml文件中检查key设置

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

为增强移动APP对百度开发SDK/API服务访问的控制,也避免恶意开发者对百度地图服务进行攻击,我们对Mobile类型(Android/IOS)的服务请求进行了安全码校验;所谓安全码即开发者在API控制台申请AK(AK和APP一一对应)时提供的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,就自带签名了

                                                                               还有下面错误的:


[align=left]以下列举目前反馈较多的一些问题[/align]

[align=left]1.  同样的key和key的配置,同一个打包的app,有的手机上key验证成功,有的手机上key验证失败?[/align]
[align=left]说明:只要存在key验证成功的情况,key和key的相关配置都是正确的,不要再更换key或者修改key的配置,请从手机系统或者网络环境上检查原因。[/align]
[align=left]推荐解决方法:[/align]
[align=left]        A. key验证依赖当前系统日期和时间,确认手机系统日期和时间是否正确。请先将日期时间调整为当前时间或者设置为自动网络获取。[/align]
[align=left]        B. key验证依赖网络通信,确认网络是否可用。请先在手机上使用浏览器访问网页测试网络是否连通。[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]2.    正常打包后安装app,app中key验证成功,调试app的时候,key验证失败?[/align]
[align=left]说明:同样的app已经验证成功,说明此app的key是正确的,不要再更换key或者修改key的配置,问题出在调试环境上,请从调试环境上检查原因。[/align]
[align=left]推荐解决方法:[/align]
[align=left]        A. key验证依赖于https方式的网络通信,确认app的调试环境中是否有破坏https环境的因素。比如很多开发者在调试过程中,同时打开http或者https的抓包工具(Fiddler等),这种抓包工具会引起https的证书验证等一系列验证问题,导致key验证中网络交互失败,这种情况下,请关闭抓包工具后调试。[/align]

[align=left][/align]
[align=left]3.    直接连2/3/4G移动网络时key验证成功,连接wifi时key验证失败?[/align]
[align=left]说明:key的验证需要通过https://api.map.baidu.com访问百度服务器。[/align]
[align=left]推荐解决方法:[/align]
[align=left]        A. 如果wifi使用了网络代理服务器,请确认代理服务器支持https通信,并且确认能够通过域名api.map.baidu.com访问。[/align]
[align=left]
[/align]
[align=left][/align]
[align=left]4.    是否支持完全离线的key验证?[/align]
[align=left]说明:key验证必须联网验证,不支持离线验证,联网服务器为https://api.map.baidu.com。[/align]
[align=left]推荐解决方法:[/align]
[align=left]        A. 如果是使用限定的定向域名访问网络,请将api.map.baidu.com域名加入网络访问的白名单。[/align]

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

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控制台申请AK(AK和APP一一对应)时提供的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值和应用包名))



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



(另:



导航如果没有语音:

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

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

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



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

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

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

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

申请密钥

Android SDK

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.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐