上次我们说到在苹果开发者官网查看MapKit文档,下面直接讲解如何加载MapKit的视图及相关的属性。
目前成都创新互联已为近1000家的企业提供了网站建设、域名、雅安服务器托管、网站托管、企业网站设计、团风网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
导入系统文件,创建MKMapView对象即可,地图就可以加载了。
第一步:申请Key
先申请高德的KEY
1、填写应用名称
2、绑定服务选择IOS平台
3、输入bundle id:将Xcode切换到General标签,即可查看Bundle Identifier
4、点击获取KEY
第二步、新建地图工程
在xCode里,新建一个 Single View Application工程,并且进行配置。
在高德官网有地图配置的详细说明,这里我就不多说了。
第三步、添加MKMapView
1、在xCode里选择Build Phases标签,点开Link Binary With Libraries,再点加号。
2、在弹出来的搜索框里搜索Mapkit。
3、选择iOS 8.0--MapKit.framework,最后点击add即可。
第四步、申请定位权限
在 info.plist中追加NSLocationAlwaysUsageDescription或者NSLocationAlwaysUsageDescription字段。
NSLocationWhenInUseUsageDescription表示应用在前台的时候可以搜到更新的位置信息;NSLocationAlwaysUsageDescription表示应用在前台和后台(suspend或terminated)都可以获取到更新的位置数据。
所以我还是建议NSLocationAlwaysUsageDescription这种方便的模式,哈哈。
1.在工程的Supporting Files中选择plist文件
2.点击+号,输入字段NSLocationAlwaysUsageDescription
3.按回车,即可完成添加字段
第五步、初始化Mapview
高德的坐标系是国内标准坐标(GCJ-02,又称火星坐标),国际上一般是采用GPS坐标(WGS-84),所以大多数国际应用在中国使用时,需要进行坐标转换。
好在苹果的MapKit用的是高德的地图,showUserLocation= YES,坐标已经是GCJ-02的啦,可以直接使用~
(PS:不建议使用CLLocationManager定位管理类,它返回的坐标是GPS坐标,必须进行坐标转换,很麻烦。)
第六步、初始化AMapSearchAPI
构造AMapSearchAPI对象,设置搜索结果语言为英文AMapSearchLanguage_en。
这步非常重要喔!必须要设置成英文,才能巧妙地让POI搜索、逆地理编码和地理编码、输入提示等,都变成纯英文喔。
第七步、写个搜索demo来看看
以一个普通的POI检索为例,当检索英文关键词时,出来纯英文的搜素建议;搜索结果也用英文来展示。
/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//构造POI搜索对象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//设置关键字
place.keywords = key;
place.requireExtension = YES;//设置成YES,返回信息详细,较费流量
if (adcode.length 0)
{
place.city = @[adcode];
}
//发起查询
[_search AMapPlaceSearch:place];
}
//回调中显示结果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}
NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];
[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];
}];
/* 将结果以annotation的形式加载到地图上. */
[_mapView addAnnotations:poiAnnotations];
/* 如果只有一个结果,设置其为中心点. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}
/* 如果有多个结果, 设置地图使所有的annotation都可见. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}
第一步:申请Key,用于搜索SDK。
提示:MapKit是不需要Key的,该key仅用于高德的iOS SDK搜索功能。
第二步:初始化MKMapView ,并添加到Subview。同时,进行定位,设置定位模式,在地图上显示定位点。
注意:
(1)MapKit中的定位(showUserLocation= YES),在回调中获取的坐标不用进行坐标偏转;若使用CLLocationManager方法进行定位,需要进行坐标偏转(参考附加内容)。
(2)MapKit没有申请定位权限,需在代码中申请一下定位权限。
申请方法:在 info.plist中追加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段。其中:
NSLocationWhenInUseUsageDescription表示应用在前台的时候可以搜到更新的位置信息。
NSLocationAlwaysUsageDescription表示应用在前台和后台(suspend或terminated)都可以获取到更新的位置数据。
代码如下:
//申请定位权限
- (void) initLocation
{
if(nil == _locationManager)
{
_locationManager = [[CLLocationManager alloc] init];
}
if([[[UIDevice currentDevice] systemVersion] floatValue] = 8.0)
{
[_locationManager requestAlwaysAuthorization];
}
}
//初始化MapView
- (void) initMapView{
//构造MKMapView
_mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;
_mapView.showsUserLocation = YES;//显示定位图标
[_mapView setUserTrackingMode:MKUserTrackingModeFollow];//设置定位模式
//将mapview添加到Subview中
[self.view addSubview:_mapView];
}
第三步:初始化主搜索对象AMapSearchAPI
构造AMapSearchAPI对象,并设置搜索结果语言。(支持英文结果的搜索功能包括:POI搜索、逆地理编码和地理编码、输入提示,能够满足基本的搜索功能)
//初始化AMapSearchAPI
- (void)initSearch
{
//构造AMapSearchAPI
_search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
_search.language = AMapSearchLanguage_en;//设置语言
}
第四步:构造搜索对象,设置搜索参数,发起查询,在相应的回调中进行结果展示(如:POI查询结果以大头针标注等等)。
以Demo中的POI查询为例,以选择的输入提示语为关键字
/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//构造POI搜索对象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//设置关键字、
place.keywords = key;
place.requireExtension = YES;//设置成YES,返回信息详细,较费流量
if (adcode.length 0)
{
place.city = @[adcode];
}
//发起查询
[_search AMapPlaceSearch:place];
}
//回调中显示结果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}
NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];
[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];
}];
/* 将结果以annotation的形式加载到地图上. */
[_mapView addAnnotations:poiAnnotations];
/* 如果只有一个结果,设置其为中心点. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}
/* 如果有多个结果, 设置地图使所有的annotation都可见. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}
当你克服重重困难终于开发出了自己的app,下一步就是向app store提交应用了,这时应该如何操作呢?我的app真的准备好提交了?我敢肯定这些问题将会浮现在你的脑海。基于这篇教程,我将告诉你一个完整的提交过程。
1.你的应用已经准备好了吗?
1
step1.测试
写完最后一行代码或者执行完最后一个功能并不意味着你的app已经完成了,你是否让你的应用在多个设备上进行测试了?你的应用是否有内存泄露的问 题?你的 应用程序是否总是崩溃?这几年,ios设备市场规模增长迅猛,你必须保证你的应用已经在尽可能多的设备上通过测试。常见的问题比如你是否在iphone 5的4寸屏幕到ipad mini的7.9寸屏幕上都通过了测试。
ios模拟器非常有用,但它是在mac上运行的,内存和处理能力要比你口袋中的手机强大很多,一款iphone 3gs和iphone 5的性能差别更不用多说。作为ios开发者,你可不能冒着风险长期使用一款过时的ios设备来创建和维护app,即便app可以在老的ios设备上很好地 运行,但不代表也可以在新设备上跑的顺畅。
苹果的审核是封闭的,但能减少不完善的性能表现给用户带来的糟糕体检。如果你的应用时常崩溃,或者启动后不久运行速递变得缓慢迟滞,那在向app store提交之前你还有不少工作要做。即便苹果审核人员不能发现app存在的问题,但用户会发现。如果用户体验很差,那么用户会给你的差评或者低分,进 一步影响到应用的销售和下载。
2
step2.规则和指南
就像我前面所说的,苹果为开发者提供了很多文档资料,开发者尤其要注意ios人机交互指南和app store审核指南,不过不少开发者没有精力或者难以静下心来认真研读这些文档,那么你的应用将会因为这些文档中列出的要求而被一再拒绝。
再退一步说,即便你没有研读ios人机交互指南和app store审核指南,但开发者也要知道大家常说的那些规则,如下我列出了一些你的应用应该和不应该做的事情。
你的应用:
不能崩溃
不能使用私有api,
不能复制原生app的功能,
应该使用iap(应用内付费)金融交易
不能在用户不知情的情况下使用相机或者麦克风
应该使用有版权的图片
这些只是上边所说的文档内容中很小的一部分。ios人机交互指南和app store审核指南内容更多是非常琐碎的。但有的小地方你也许会不经意的违反。比如,在苹果使用启用自家地图之前,mapkit framework使用的是谷歌地图,用户也非常清楚谷歌的logo会放在每张地图的左下角,如果你的应用的用户界面覆盖了谷歌的logo,那么苹果就会 拒绝你的应用。虽然这非常琐碎,但也是不少开发者经常“犯错误”的地方。
END
2.预先准备
1
step 1: app id(应用id)
app id是识别不同应用程序的唯一标示符。每个app都需要一个app id或者app标识。目前有两种类型的app标识:一个是精确的app id(explicit app id),一个是通配符app id(wildcard app id)。 使用通配符的app id可以用来构建和安装多个程序。尽管通配符app id非常方便,但是一个精确的app id也是需要的,尤其是当app使用icloud 或者使用其他ios功能的时候,比如game center、push notifications或者iap。
如果你不确定什么样的app id适合你的项目,我推荐你读下苹果关于这一主题的文档:technical note qa1713。
2
step 2: distribution certificate(发布证书)
ios应用都有一个安全证书用于验证开发者身份和签名。为了可以向app store提交app,你需要创建一个ios provisioning profile 。首先需要创建一个distribution certificate(发布证书),过程类似于创建一个development certificate(开发证书)。如果你已经在实体设备上测试你的app,那么你对创建development certificate就已经很熟悉了。
如果对此不熟悉,我建议你读下苹果关于signing certificates和provisioning profiles的详细指导。
3
step 3: provisioning profile(配置文件)
一旦你创建了app id和distribution certificate,你可以创建一个ios provisioning profile以方便在app store中销售你的app。不过,你不能使用和ad hoc distribution相同的provisioning profile。你需要为app store分销创建一个单独的provisioning profile,如果你使用通配符app id,那么你的多个app就可以使用相同的provisioning profile。
4
step 4: build settings(生成设置)
配置app id、distribution certificate 和provisioning profile已经完成,是时候配置xcode中target的build settings了。在xcode project navigator的targets列表中选择一个target,打开顶部的build settings选项,然后更新一下code signing来跟之前创建的distribution provisioning profile相匹配。最近添加的provisioning profiles有时候不会立马就在build settings的code signing中看到,重启一下xcode就可以解决这个问题。
5
step 5: deployment target(部署目标)
非常有必要说下deployment target,xcode中每个target都有一个deployment target,它可以指出app可以运行的最小版本。不过,一旦应用在app store中生效,再去修改deployment target,你要考虑到一定后果。如果你在更新app的时候提高了deployment target,但是已经购买应用的用户并没有遇到新的deployment target,那么应用就不能在用户的移动设备上运行。如果用户通过itunes (不是设备)下载了一个更新过的app,然后替代了设备上原先的版本,最后却发现新版本不能在设备上运行,这确实是个问题。
对此我有两个方法
(1) 当你决定提高现有app的deployment target时,要在新版本的版本注释中进行说明。如果你提前告知用户,那么至少有一点,你已经尽力阻止问题的发生了。
(2) 对于一款新app,我经常会把deployment target设置为最近发布的系统版本。因为新ios版本发布后,渗透率的增长速度是令人难以置信的。很多人认为提高deployment target会失去大部分市场,这个说法并不准确,比如ios 6,ios 6发布后一个月,超过60%的设备已经进行了更新。但对android而言,就是另外一回事了,android用户并不会像ios用户那样热衷于更新操作 系统版本。
END
3. assets(资源包)提交
1
step 1: icons(图标)
icon是app中不可分割的一部分,你要确保icon尺寸不会出现差错。
itunes artwork: 1024px x 1024px (required)
ipad/ipad mini: 72px x 72px and 114px x 114px (required)
iphone/ipod touch: 57px x 57px and 114px x 114px (required)
search icon: 29px x 29px and 58px x 58px (optional)
settings application: 50px x 50px and 100px x 100px (optional)
屏幕截图的作用不言而喻,你可以为每个app上传5张截图,虽然至少需要上传一张,可能很少有人会只上传一张图片。另外,你还需要分别为 iphone/ipod touch和ipad/ipad mini准备不同的屏幕截图。这也是不小的工作量,但却能展示应用的另一面。shiny development开发的一款售价6.99美元的mac软件status magic可以为你节省不少时间。status magic可以帮你把状态栏放在截图的正确位置。
屏幕截图和icon是应用给用户的第一感觉,直接关系到用户会不会购买。不过,你所上传的屏幕截图也不一定非得是实际的截图,看看where’s my water? (小鳄鱼爱洗澡)截图可以通过使用此策略,更具吸引力和说服力。
2
step 3: 元数据
在提交应用之前,要管理好app的元数据,包括1应用名称、2版本号、3主要类别,4简洁的描述,5关键词,6.支持url。如果你需要更新应用,你还要提供新增加的版本内容。
如果你的应用需要注册吗,你还得向苹果提供一个测试账户或者demo账户,这样审核人员就能很快进入app,而不用再注册账号。
提交ios应用
END
4. 提交准备
1
step 1: 完成基本信息
出现在app store中app的名字要做到独一无二, 这个名字可以不同于主屏幕icon下边的名字,不过推荐使用相同的名字。
sku number是一个用来识别app的特殊字符串。我经常使用app的bundle identifier。最下边是app的bundle id,你可以从下来菜单中选择通配符app id或者准确的app id。
2
step 2:价格和有效性
下一步,确定app的价格和有效性。苹果已经确定好了价格梯度,所以你不需要分别选择各个国家中app售价,你只需要指定在哪个国家的应用商店出售 即可。 在app store显示这款应用之后,这一过程中填的信息还可以被修改,也就是说你可以更改价格,并且不需要提交或更新。
3
step 3: 元数据
我们已经说过元数据了,不过还没有说应用评级。根据应用的内容和功能,苹果会给应用一定评级,比如很多应用是4+,500px是17+。除了告诉用户app的内容和功能,也可以让孩子的父母放心。
如果你的应用等级跟内容不符合,苹果也会拒绝你的应用。
4
step 4: 准备上传二进制文件
提交完app的元数据后,你会看到关于app的一些摘要信息,你应该在提交之前看看app的版本。点击“view details”按钮,再点击右上角的“ready to upload binary”。然后系统会问你一个或几个关于app的问题,完成后,你会看到提示信息,告诉你准备上传二进制文件。app的状态就变成“waiting for upload”。
END
5. 上传二进制文件
为了上传程序,需要为程序创建一个archive。你只能在一台真实设备上创建一个archive。 如果你在active scheme中选择了ios simulator,那么在xcode的product菜单中archive选项是灰色不可选的。连接一台ios设备到mac机器上,然后在active scheme中选择这台设备,然后选择xcode中product菜单里面的archive。
如果一切正常的话,现在你会获得一个archive,并且xcode的organizer会自动打开,并显示出刚刚生成的archive。在列表中 选中archive,然后点击右边的“distribute”按钮。在显示出来的画面中,选择“submit to the ios app store”。然后输入你的ios开发者账号进行认证。接着选择application 和code signing identity。
应用程序的二进制文件会上传到苹果的服务器中——在这个过程中,你的程序同样需要被验证。如果在验证过程中遇到了错误,程序的提交流程就会失败。验证处理非常有用,如果程序中有一些错误,苹果的 app store评审团会告诉你具体原因。
END
6.等待
1
上传完成后,app状态就变成“waiting for review”了。
以横条广告为例的广告插入实现,插屏广告同理,积分墙广告待续。
工具/原料
SDK
方法/步骤
注册下载SDK
创建项目,创建完成项目后、将会得到应用ID、应用密钥这两个字符串:
将下载下来的库添加到本地项目中,选择选项:
其次添加依赖框架、这步很重要,
所要添加的依赖框架框架:
AdSupport.framework
Security.framework
StoreKit.framework
ImageIO.framework
MapKit.framework
QuartzCore.framework
SystemConfiguration.framework
CoreTelephony.framework
CoreGraphics.framework
添加完成、编译....
最后代码实现...显示横幅广告
这里需要做3件事:
1)首先要到AppController.mm 中初始化代理
2)调用initQuMiGuangGao初始化方法
3)显示广告横幅
1 将所要现实的那个.cpp文件改成.mm文件
2 在.mm文件中把头文件包含进来
当前标题:iosmapkit开发,ios开发sdk
本文链接:https://www.cdcxhl.com/article44/dsciphe.html
成都网站建设公司_创新互联,为您提供微信公众号、品牌网站建设、域名注册、做网站、Google、网站制作
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联