IOS_OC_百度地图与社交分享
前奏. 知识点介绍
一. 导航和画线
- 地图画线 (理解)
二. 百度地图
- 集成百度地图 (掌握)
- POI检索 (掌握)
三. 社交分享
- 系统自带分享 (了解)
- 友盟分享 (掌握)
- SSO授权 (理解)
一. 导航和画线
1. 地图画线 (理解)
要进行画线—-> 需要获取起始点及终点位置—-> 创建方向对象计算路线—->获取路线添加到地图上—-> 设置渲染对象
注意: 实现画线, 需要请求用户授权. 画线时需要获取用户的当前位置, 此时, 就必须在当前程序中请求授权.
- 创建地理编码并执行编码方法
- 获取CLPlacemark地标对象
- 根据CLPlacemark创建MKPlacemark
- 根据MKPlacemark获取终点MKMapItem
- 调用MKMapItem的mapItemForCurrentLocation方法获取起点MKmapItem
- 创建方向请求对象, 并设置起点和中点属性
- 创建方向对象, 发送计算方向的方法
- 在计算方向的block中获取路线对象MKRoute
/** 1. 需要请求授权 2. 创建一个方向请求对象来计算路线, 并获取路线轨迹, 添加到地图上 3. 将路线轨迹渲染到地图上 */ - (void)routeWithSourceItem:(MKMapItem *)sourceItem destinationItem:(MKMapItem *)destinationItem { //1. 创建方向请求对象 --> 拼接请求参数 MKDirectionsRequest *request = [MKDirectionsRequest new]; request.source = sourceItem; request.destination = destinationItem; //2. 创建一个方向对象 --> 创建一个完整的请求URL MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; //3. 计算路线 --> 发送请求 [directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) { //3.1 防错处理 if (error || response.routes.count == 0) { NSLog(@"出错"); return ; } //3.2 获取路线信息 --> 取一个 MKRoute *route = response.routes.firstObject; //polyline: 折线 --> 也就是实际的路线轨迹 //Overlay: 遮盖物 [self.mapView addOverlay:route.polyline]; }]; } //只要地图添加了addOverlay了, 就会来到此方法, 设置渲染 //MKOverlay:遮盖物 Renderer:渲染 - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay { //1. 创建折线渲染物对象 MKPolylineRenderer *polyline = [[MKPolylineRenderer alloc] initWithOverlay:overlay]; //2. 设置颜色 --> 必须的 polyline.strokeColor = [UIColor blueColor]; polyline.lineWidth = 5; //3. 返回此对象 return polyline; }
二. 百度地图
1. 集成百度地图 (掌握)
- 注册百度开发者: http://lbsyun.baidu.com/index.php?title=iossdk
- 注册应用, 获取key
- 按照文档的开发指南集成即可(如果文档有错, 或者描述不清, 需要看官方Demo), 建议顺序: 配置开发环境 —> Hello BaiduMap —> 注意事项
#pragma mark 1. 集成百度地图 (掌握)
一. 为什么更多的开发者使用第三方SDK?
1. 第三方SDK有文档, 有Demo, 使用方便
2. 为了统一各个平台的经纬度问题(火星坐标)
二. SDK的使用流程
1. 第三方SDK(开发组件包, 需要注册才能使用 --> 需要创建应用 --> 需要获取授权码 --> Appdelete中注册 ) > 第三方类库(AFN/SDWebImage)
2. 集成文档的查看顺序 仔细看文档就可以实现.
3. 按照需要的功能, 拷贝对应的代码, 修改细节即可
三. 集成百度地图的流程
1. 注册开发者, 注册应用程序 --> Key
2. 开发指南 --> 配置开发环境 --> Hello BaiduMap --> 注意事项
3. 按照需要的功能找对应的文档代码,如果文档有问题,可以参考Demo
2. POI检索 (掌握)
- POI: 中文可以翻译为“兴趣点”。在地理信息系统中,一个POI可以是一栋房子、一个商铺、一个邮筒、一个公交站等。
- POI检索流程: 先创建始检索对象, 然后设置检索参数, 在代理中接收数据自行处理
- (void)poiSearch { //初始化检索对象 _searcher =[[BMKPoiSearch alloc]init]; _searcher.delegate = self; //发起检索 --> 拼接参数 BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init]; ///分页索引,可选,默认为0 option.pageIndex = 0; ///分页数量,可选,默认为10,最多为50 option.pageCapacity = 10; option.location = CLLocationCoordinate2DMake(39.915, 116.404); option.keyword = @"小吃"; //这里相当于在发送网络请求 用search对象拼接了otion的参数 BOOL flag = [_searcher poiSearchNearBy:option]; if(flag) { NSLog(@"周边检索发送成功"); } else { NSLog(@"周边检索发送失败"); } } //实现PoiSearchDeleage处理回调结果 - (void)onGetPoiResult:(BMKPoiSearch*)searcher result:(BMKPoiResult*)poiResultList errorCode:(BMKSearchErrorCode)error { if (error == BMK_SEARCH_NO_ERROR) { //在此处理正常结果 //1. 直接显示大头针 //2. 显示TableView //从poi结果数组中获取 for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) { // 添加一个PointAnnotation BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init]; annotation.coordinate = poiInfo.pt; annotation.title = poiInfo.name; [_mapView addAnnotation:annotation]; } } else if (error == BMK_SEARCH_AMBIGUOUS_KEYWORD){ //当在设置城市未找到结果,但在其他城市找到结果时,回调建议检索城市列表 // result.cityList; NSLog(@"起始点有歧义"); } else { NSLog(@"抱歉,未找到结果"); } }
三. 社交分享
1. 系统自带分享 (了解)
- 导入系统Social框架, 然后创建并弹出
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { //1. 判断分享的类型是否可用 if (![SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) { NSLog(@"请到设置中添加新浪微博账号, 然后在分享"); return; } //2. 创建分享控制器 SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; //2.1 文字 [composeVC setInitialText:@"拉斯维加斯之夜, 一不小心输了2个亿, 就是为了图个开心"]; //2.2 图像 [composeVC addImage:[UIImage imageNamed:@"1"]]; //2.3 网址 [composeVC addURL:[NSURL URLWithString:@"http://www.itcast.cn"]]; //3. 模态弹出 [self presentViewController:composeVC animated:nil completion:nil]; }
2. 友盟分享 (掌握)
- 注册开发者:http://www.umeng.com
- 选择U-Share模块, 创建应用, 获取key(不需要和Bundle ID匹配),
- 看文档集成
3. SSO授权 (理解)
SSO授权: 单点登录. 获取授权时(譬如微博), 如果手机已经安装对应的客户端(譬如微博客户端), 则可通过对应的官方客户端快速完成OAuth2.0授权。
- SSO授权与OAuth授权, 流程对比:
- 1> OAuth在当前APP里就可以完成, 只需要一个网页为载体, 需要用户手动输入账号密码, 然后发送请求进行授权
- 2> SSO前提是安装了第三方的客户端(如QQ,微信,微博), 授权过程在第三方客户端中完成, 如果第三方的客户端已经是登陆状态, 就只需一键授权
- SSO优点:
- 1> 节省用户输入的时间(账号密码太长导致输入过慢, 键盘太小导致输入有误)
- 2> 保护用户的隐私
- 3> 减少用户在任何环节的流失率