Hbuild.gradle属性获取开发APP的地理位置具体城市获取不了

iOS项目集成百度地图方法以及问题解决 - 简书
iOS项目集成百度地图方法以及问题解决
集成百度地图
概述百度地图iOS SDK自v2.7.0版本起,向广大开发者提供了 .framework形式的SDK开发包,这种形式的开发包配置简单,使用方便,推荐大家使用。配置.framework形式开发包
第一步、引入BaiduMapAPI.framework
百度地图SDK提供了模拟器和真机两种环境所使用的framework,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下,开发者可根据需要使用真机或模拟器的包,如果需同时使用真机和模拟器的包,可以使用lipo命令将设备和模拟器framwork包中的BaiduMapAPI文件合并成一个通用的文件,命令如下:lipo -create Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI Release-iphonesimulator/BaiduMapAPI.framework/BaiduMapAPI -output Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI
此时Release-iphoneos文件夹下的BaiduMapAPI.framework即可同时用于真机和模拟器(可以使用lipo–info 命令检查framework所支持的架构)。
将所需的BaiduMapAPI.framework拷贝到工程所在文件夹下。在 TARGETS-&Build Phases-& Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI.framework文件添加到工程中。
注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -& Edit Active Target -& Build -& GCC4.2 - Language -& Compile Sources As设置为"Objective-C++"
第二步、引入所需的系统库
百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework。添加方式:在Xcode的Project -& Active Target -&Build Phases -&Link Binary With Libraries,添加这几个framework即可。
第三步、环境配置
在TARGETS-&Build Settings-&Other Linker Flags 中添加-ObjC。
第四步、引入mapapi.bundle资源文件
如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示
mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。
方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。
第五步、引入头文件
在使用SDK的类引入头文件:
#import &BaiduMapAPI/BMapKit.h&//引入所有的头文件
#import &BaiduMapAPI/BMKMapView.h&//只引入所需的单个头文件
控制台列表
选择创建应用,应用类型选择iOS,应用名称填你需要的,安全码为自己项目的BundleID
创建应用列表
选择提交后,就可以得到AK,然后在工程中配置,代码如下:
#import &UIKit/UIKit.h&
#import &BaiduMapAPI/BMapKit.h&
@interface AppDelegate : UIResponder &UIApplicationDelegate,BMKGeneralDelegate&
@property (strong, nonatomic) UIWindow *
@property (strong, nonatomic) BMKMapManager *mapM
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSLog(@"%@",[[NSBundle mainBundle] bundleIdentifier]);
// 要使用百度地图,请先启动BaiduMapManager
_mapManager = [[BMKMapManager alloc] init];
BOOL ret = [_mapManager start:@"此处填写申请的AK" generalDelegate:self];
if (!ret) {
NSLog(@"manager start failed!");
return YES;
在AppDelegate.m文件中实现BMKGeneralDelegate代理方法
- (void)onGetNetworkState:(int)iError
if (0 == iError) {
NSLog(@"联网成功");
NSLog(@"onGetNetworkState %d",iError);
- (void)onGetPermissionState:(int)iError
if (0 == iError) {
NSLog(@"授权成功");
NSLog(@"onGetPermissionState %d",iError);
至此,百度地图集成完成,参考其API实现相应功能
遇到的问题
百度地图 启动就报 manager start failed!之所以出现这样的问题,是因为在Xcode6中 plist文件中默认是没有BundleDisplayName的 所以你需要找到你工程下对应的info.plist文件 添加 BundleDispayName 并设置相应的value就可以了
自iOS8起,系统定位功能进行了升级,SDK为了实现最新的适配,自v2.5.0起也做了相应的修改,开发者在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription):NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述NSLocationAlwaysUsageDescription ,允许永久使用GPS的描述
将AppDelegate.m文件后缀改为AppDelegate.mm文件,否则编译不通过
AppDelegate.mm
记录点滴,与君共勉。输入关键字或相关内容进行搜索
今天刚刚接触HBuild,然后发现了可以用HTML5+开发APP,我瞬间觉得很强大,但是我还不知道如何入门,有没有DEMO和视频看看么HTML5+,MUI又是什么,是皮肤?有没有相关视频或者DEMO看看么,让我理解下。
官网 每天上午十点 ,下午三点,晚上八点,直播课程H5混合开发,框架MUI-H5+,微信小程序,Vue.js,PHP,JavaScript,ReactNative, 进入直播群:
要回复问题请先或
浏览: 6329
关注: 3 人等等等等完等完等等等等等相关问答完完完完完等完完完等完等最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友当前位置:
使用HTML5地理位置定位到城市的方法及注意事项
使用HTML5地理位置定位到城市的方法及注意事项
介绍本文将简述一下如何通过HTML5和百度地图开放平台提供的API来实现对浏览器的定位。实现效果为显示出用户所在的省市,即: XXX省 XXX市。实现思路利用HTML5 提供的API获取到用户的经纬度信息,再将用户的经纬度信息传到百度地图开放平台,百度地图开放平台根据提供的坐标信息返回当前的省市。兼容性及依赖兼容性:Internet Explorer 9+, Firefox, Chrome, Safari 和 Opera 都支持Geolocation(地理定位).依赖:不依赖于任何库和框架HTML5 API使用HTML5 Geolocation API的getCurrentPosition() 方法能够获取用户的经纬度信息。getCurrentPosition() 常用参数有两个,一个是成功时执行,一个时错误处理。如果getCurrentPosition()运行成功,则向第一个参数中规定的函数返回一个coordinates对象,用于提供位置信息。coordinates对象属性如下:
coords.latitude
十进制数的纬度
coords.longitude
十进制数的经度
coords.accuracy
coords.altitude
海拔,海平面以上以米计
coords.altitudeAccuracy
位置的海拔精度
coords.heading
方向,从正北开始以度计
coords.speed
速度,以米/每秒计
响应的日期/时间
其中,latitude、longitude 以及 accuracy 属性 是固定返回的属性,其他属性在可用状态下才会一起返回。如果getCurrentPosition()运行失败,则向第二个参数中规定的函数返回一个error对象,用于提供错误信息。
1: PERMISSION_DENIED,用户不允许地理定位 2: POSITION_UNAVAILABLE,无法获取当前位置 3:TIMEOUT,操作超时
返回相应的错误信息
下例是一个简单的地理定位实例,可返回用户位置的经度和纬度:function getLocation()
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(showPosition, showError);
console.log("该浏览器不支持获取地理位置。");
function showPosition(position)
console.log("纬度: " + position.coords.latitude +
" 经度: " + position.coords.longitude);
function showError(error) {
console.log(error);
参考资料:菜鸟教程百度地图API命名空间百度地图API使用BMap作为命名空间,所有类均在该命名空间之下,比如:BMap.Map、BMap.Control、BMap.Overlay。使用方法首先,我们需要引入百度地图API文件:&script src="http://api./api?v=1.4"&&/script&//参数v表示您加载API的版本,使用JavaScript APIv1.4及以前版本可使用此方式引用。&script src="http://api./api?v=2.0&ak=您的密钥"&&/script&//使用JavaScript APIv2.0请先申请密钥ak,按此方式引用。然后,我们再创建一个地理点坐标:var point = new BMap.Point(116.404, 39.915);
Point(lng: Number, lat: Number)
以指定的经度和纬度创建一个地理点坐标
最后,我们可以通过创建好的点坐标获取到用户的地址解析:var myGeo = new BMap.Geocoder();myGeo.getLocation(point,function(result) {
console.log(result.addressComponents.province + ' ' + result.addressComponents.city);}
Geocoder()
创建一个地址解析器的实例
getPoint(address: String, callback: Function, city: String)
对指定的地址进行解析。如果地址定位成功,则以地址所在的坐标点Point为参数调用回调函数。否则,回调函数的参数为null。city为地址所在的城市名,例如“北京市”
getLocation(point: Point, callback: Function, options: LocationOptions)
对指定的坐标点进行反地址解析。如果解析成功,则回调函数的参数为GeocoderResult对象,否则回调函数的参数为null
参考资料:
百度地图 JavaScript API
百度地图 JavaScript API起步
百度地图 JavaScript API类参考
完整代码示例&!DOCTYPE html&&html lang="en"&
&meta charset="UTF-8"&
&meta name="viewport" content="width=device-width, initial-scale=1.0"&
&meta http-equiv="X-UA-Compatible" content="ie=edge"&
&p id="test"&
&script src="https://api./api?v=2.0&ak=您的密钥" type="text/javascript"&
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition, showError);
console.log("该浏览器不支持获取地理位置。");
function showPosition(position) {
var point = new BMap.Point(position.coords.longitude, position.coords.latitude);
var myGeo = new BMap.Geocoder();
myGeo.getLocation(point,
function(result) {
alert(result.addressComponents.province + ' ' + result.addressComponents.city);
function showError(error) {
console.log(error);
getLocation();
&/script&&/html&浏览器安全机制按照上面的步骤去做,理论上是可以实现我们的功能。但事实并非如此,不信你可以起个服务验证一下看看。通过验证,你会发现在Chrome 浏览器中使用http://localhost:8080 或者 http://127.0.0.1:8080 可以正常获取到浏览器的地理位置,但通过IP或者域名的形式,如:http://172.21.3.82:8080 和 进行访问时却获取不到。为什么呢?打开控制台,你会发现有以下错误信息:
Only secure origins are allowed (see: https://goo.gl/Y0ZkNV).“只有在安全来源的情况才才被允许”。错误信息里还包含了一个提示链接,我们不妨打开这个链接(https://goo.gl/Y0ZkNV)看看。原来,为了保障用户的安全,Chrome浏览器认为只有安全的来源才能开启定位服务。那什么样才算是安全的来源呢?在打开链接的页面上有这么一段话:“Secure origins” are origins that match at least one of the following (scheme, host, port) patterns:
(https, *, *)
(wss, *, *)
(*, localhost, *)
(*, 127/8, *)
(*, ::1/128, *)
(file, *, —)
(chrome-extension, *, —)
This list may be incomplete, and may need to be changed. Please discuss!大概意思是说只有包含上述列表中的scheme、host或者port才会被认为是安全的来源,现在这个列表还不够完整,后续可能还会有变动,有待讨论。这就可以解释了为什么在http://localhost:8080 和 http://127.0.0.1:8080访问下可以获取到浏览器的地理位置,而在http://172.21.3.82:8080 和
确获取不到了。如果需要在域名访问的基础上实现地位位置的定位,那我们只能把http协议升级为https了。nginx搭建https服务从http升级为https要先获取一张证书。
证书是一个二进制文件,里面包含经过认证的网站公钥和一些元数据,要从经销商购买。由于我司已经升级到了https,就不需要我瞎折腾了,感兴趣的可以参考阮一峰老师的这篇文章《HTTPS 升级指南》。虽然我司对外开放的网站都已经全面升级为https,但是内网的测试环境还是没有升级到https,下面将简述一下如何通过nginx 来搭建一个https服务。SSL 证书要设置安全服务器,使用公共钥创建一对公私钥对。大多数情况下,发送证书请求(包括自己的公钥),你的公司证明材料以及费用到一个证书颁发机构(CA)。CA验证证书请求及您的身份,然后将证书返回给您的安全服务器。
但是内网实现一个服务器端和客户端传输内容的加密,可以自己给自己颁发证书,只需要忽略掉浏览器不信任的警报即可!制作CA证书XXXX.key CA私钥:openssl genrsa -des3 -out XXXX.key 2048XXXX.crt CA根证书(公钥):openssl req -new -x509 -days 365 -key XXXX.key -out XXXX.crt在配置你的公钥过程中会让你填写一些信息,这时候随便填一下就可以了。虚拟主机配置文件worker_processes
worker_connections
default_type
application/octet-
keepalive_timeout
upstream sslfpm {
server 127.0.0.1:9000 weight=10 max_fails=3 fail_timeout=20s;
#为一个server开启ssl支持
#为虚拟主机指定pem格式的证书文件
ssl_certificate
/etc/ssl/cunzhang_test.
#为虚拟主机指定私钥文件
ssl_certificate_key
/etc/ssl/cunzhang_test.
#客户端能够重复使用存储在缓存中的会话参数时间
ssl_session_timeout
#指定使用的ssl协议
ssl_protocols
SSLv3 TLSv1;
#指定许可的密码描述
ssl_ciphers
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#SSLv3和TLSv1协议的服务器密码需求优先级高于客户端密码
ssl_prefer_server_
location / {
/etc/ssl/;
autoindex_exact_
autoindex_
# redirect server error pages to the static page /50x.html
error_page
500 502 503 504
error_page
location = /50x.html {
/usr/share/nginx/
location = /404.html {
/usr/share/nginx/
# proxy the PHP scripts to fpm
location ~ \.php$ {
access_log
/etc/ssl/ssl.access.
error_log /etc/ssl/ssl.error.
root /etc/ssl/;
fastcgi_param HTTPS
include /usr/local/etc/nginx/fastcgi_
虚拟主机文件配置之后还有记得在hosts给你的域名配置好ip地址,这样就可以通过https访问到你的网页实现定位功能了。参考资料:Nginx搭建https服务器
与本文相关文章}

我要回帖

更多关于 ios 获取build版本号 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信