iOS开发之集成高德地图(一)

简介: 在iOS开发中,经常会使用到定位和地图,Apple自带的定位和地图应付一般的场景绰绰有余,但是也缺少一些功能,如POI搜索、不够接地气等。因此作者选择了高德地图,这篇文正主要介绍定位功能的集成。

在iOS开发中,经常会使用到定位和地图,Apple自带的定位和地图应付一般的场景绰绰有余,但是也缺少一些功能,如POI搜索、不够接地气等。因此作者选择了高德地图,这篇文正主要介绍定位功能的集成。

环境:Xcode7.3.1 + iOS 9.3 + 能访问网络

1、注册开发者,创建应用

首先注册成为开发者,成为开发者以后,登录并进入控制台,然后创建一个iOS应用,注意这一定要填写好你的 Bundle identifier,不知道的后文有说明怎么查询。

  • 进入控制台


    img_1c7c05db023cdb447a664a05e32468fd.gif
    获取Key.gif
  • 填写key的信息


    img_d8c68f80f2f551f2439e9db2166d3414.png
    填写key的信息.png
  • 生成一个key


    img_65559a59cdb1587811410754afae56bb.jpe
    申请Key.JPG
2、通过CocoaPods导入需要的SDK
platform :ios, '9.0' #手机系统版本
target '集成高德地图' do #新建的Xcode工程名
     pod 'AMapLocation'  #定位 SDK
end

3、配置Info.plist,添加前后台定位的授权信息,到时候会弹出一个对话框让用户选择是否同意(iOS8以后必须要添加),可以先只设置NSLocationWhenInUseUsageDescription
NSLocationWhenInUseUsageDescription  表示应用在前台的时候可以搜到更新的位置信息。
NSLocationAlwaysUsageDescription  表示应用在前台和后台(suspend 或 terminated)都可以获取到更新的位置数据。
4、在AppDelegate中初始化key
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

//    不知道Bundle identifier的通过如下方式查询
//    NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];  
//    NSLog(@"%@", bundleIdentifier);
    
    [AMapServices sharedServices].apiKey =@"注册产生的key";
    
    
    return YES;
}
5、UIViewController代码,注释非常详细

通过官方文档,我们知道一共有三种定位方式,分别是一次定位、持续定位和后台定位,分别用三个独立的方法分开写了。

#import "ViewController.h"
#import <AMapFoundationKit/AMapFoundationKit.h>

#import <AMapLocationKit/AMapLocationKit.h>

@interface ViewController ()<AMapLocationManagerDelegate>

//定位管理器
@property(nonatomic, strong) AMapLocationManager *locationManager;
//定位回调次数统计
@property(nonatomic, assign) NSInteger count;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.count = 0;
    
    [self onceLoaction];
    [self alwaysLoaction];
    [self backgroundLoaction];
    
    
}

#pragma mark - 持续定位
-(void)backgroundLoaction{
    
    //初始化定位管理器
    self.locationManager = [[AMapLocationManager alloc]init];
    // 设置代理对象
    self.locationManager.delegate = self;
    // 设置反地理编码
    self.locationManager.locatingWithReGeocode = YES;
    //iOS9设置后台定位
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
        self.locationManager.allowsBackgroundLocationUpdates = YES;
    }
    //开启持续定位
    [self.locationManager startUpdatingLocation];
    
}


#pragma mark - 持续定位
-(void)alwaysLoaction{
    
    //初始化定位管理器
    self.locationManager = [[AMapLocationManager alloc]init];
    // 设置代理对象
    self.locationManager.delegate = self;
    // 设置反地理编码
    self.locationManager.locatingWithReGeocode = YES;
    //开启持续定位
    [self.locationManager startUpdatingLocation];
    
}


#pragma mark - 单次定位
-(void)onceLoaction{
    
    //初始化定位管理器
    self.locationManager = [[AMapLocationManager alloc]init];
    //单次定位
    [self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
        
        NSLog(@"%@", regeocode);
        
    }];
}


#pragma mark - 2个代理方法
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location{
    
    NSLog(@"我是个倒霉蛋,我不会被调用");
    
}

//若实现了下面的回调,将不会再回调amapLocationManager:didUpdateLocation:方法。
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location reGeocode:(AMapLocationReGeocode *)reGeocode{
    
    if (reGeocode)
    {
        NSLog(@"reGeocode:%@", reGeocode);
    }
    
    self.count++;
    
    if (self.count == 10) {
        // 超过10次停止定位
        [self.locationManager stopUpdatingLocation];
    }
    
}

@end
总结

三种不同的定位,都可以实现定位,开发时请根据不同的需求选择不同的定位方式:

  • 单次定位:使用简单,只需要一个方法就可以搞定,无需设置代理
  • 持续定位:需要设置代理,通过startUpdatingLocation方法获取定位信息,代理回调函数会被调用多次
  • 后台定位:除了持续定位需要做的以外,还需要设置NSLocationAlwaysUsageDescription字段,否则退出后台会有大蓝条提示,而且iOS9之前和之后的做法也不同。
目录
相关文章
|
2月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1332 123
|
1月前
|
定位技术 开发工具 iOS开发
百宝箱开放平台 ✖️ iOS 集成说明
本文介绍百宝箱智能体与友盟+ iOS 应用集成方法,涵盖手动集成、权限配置、SDK 初始化、日志查看及效果验证。提供依赖库添加、Info.plist 权限声明、channel 规范、demo 工程下载与运行说明,助您快速完成接入。
162 1
|
4月前
|
数据采集 运维 DataWorks
DataWorks 千万级任务调度与全链路集成开发治理赋能智能驾驶技术突破
智能驾驶数据预处理面临数据孤岛、任务爆炸与开发运维一体化三大挑战。DataWorks提供一站式的解决方案,支持千万级任务调度、多源数据集成及全链路数据开发,助力智能驾驶模型数据处理与模型训练高效落地。
|
运维 监控 安全
Cisco ISR 4000 Series IOS XE 17.18.1a ED 发布 - 思科 4000 系列集成服务路由器 IOS XE 系统软件
Cisco ISR 4000 Series IOS XE 17.18.1a ED - 思科 4000 系列集成服务路由器 IOS XE 系统软件
106 0
|
7月前
|
监控 Java API
1K star!这个开源项目让短信集成简单到离谱,开发效率直接翻倍!
SMS4J 是一款由国内技术团队打造的短信聚合框架,专为解决多短信服务商接入难题而生。它就像短信界的"瑞士军刀",目前已整合21家主流短信服务商,从阿里云、腾讯云到中国移动云MAS,开发者只需通过简单配置即可实现多平台无缝切换。
457 4
|
9月前
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
593 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
5月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
934 0
|
10月前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
634 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
7月前
|
人工智能 程序员 测试技术
通义灵码与魔搭 Notebook 深度集成:在线编码开箱即用,开发效率倍增
通义灵码 2.0 AI 程序员 2025 年 1 月正式上线,目前已经服务百万开发者,成为国内开发者最受欢迎的智能编码助手。
|
9月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
395 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡

热门文章

最新文章

下一篇
oss云网关配置