IOS_OC_百度地图与社交分享

时间:2024-04-26 20:34:28

前奏. 知识点介绍

一. 导航和画线

  1. 地图画线 (理解)

二. 百度地图

  1. 集成百度地图 (掌握)
  2. POI检索 (掌握)

三. 社交分享

  1. 系统自带分享 (了解)
  2. 友盟分享 (掌握)
  3. 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 == ) {
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 = ; //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 = ; ///分页数量,可选,默认为10,最多为50
option.pageCapacity = ; 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:@""]]; //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> 减少用户在任何环节的流失率