自己尝试做了个公交app 需要用到分享及导航功能 归纳整理一下脑子里的东西
前提: 要实现位置管理器授权
1. 前几步跟导航一样, 但这里额外要获取 起点位置
2. 创建一个方向请求对象 –> 相当于拼接网址 –> 需要传入参数: 起点和终点
3. 创建方向对象 –> 创建一个请求对象
4. 计算路径 –> 处理网络请求的结果
5. 遍历数组, 获取数据 : polyline : 多段线
6. 添加到地图上 :addOverlay 遮盖物
—代理方法—-
7. rendererForOverlay: 此方法中
1. 创建一个折线渲染物对象
2. 设置线条颜色 –> 必须设置, 否则看不见
3. 设置线条宽度
参考官方文档 –> 申请秘钥 –> 配置开发环境 –> Hello BaiduMap –> 注意事项
–> 注意Bundle ID(官方文档没有提示)
参考官方文档 –> POI注意一下延时调用即可
#import "ViewController.h"
#import <BaiduMapAPI_Base/BMKBaseComponent.h>//引入base相关所有的头文件
#import <BaiduMapAPI_Map/BMKMapComponent.h>//引入地图功能所有的头文件
#import <BaiduMapAPI_Search/BMKSearchComponent.h>//引入检索功能所有的头文件
#import <BaiduMapAPI_Cloud/BMKCloudSearchComponent.h>//引入云检索功能所有的头文件
#import <BaiduMapAPI_Location/BMKLocationComponent.h>//引入定位功能所有的头文件
#import <BaiduMapAPI_Utils/BMKUtilsComponent.h>//引入计算工具所有的头文件
#import <BaiduMapAPI_Radar/BMKRadarComponent.h>//引入周边雷达功能所有的头文件
#import <BaiduMapAPI_Map/BMKMapView.h>//只引入所需的单个头文件
@interface ViewController ()<BMKMapViewDelegate, BMKPoiSearchDelegate>
{
BMKMapView *_mapView;
BMKPoiSearch *_searcher;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//1. 创建百度地图
_mapView = [[BMKMapView alloc]init];
self.view = _mapView;
//2. 切换为卫星图
//[_mapView setMapType:BMKMapTypeSatellite];
//3. 添加一个PointAnnotation
BMKPointAnnotation* annotation = [[BMKPointAnnotation alloc]init];
CLLocationCoordinate2D coor;
coor.latitude = 39.915;
coor.longitude = 116.404;
annotation.coordinate = coor;
annotation.title = @"这里是北京";
[_mapView addAnnotation:annotation];
//4.POI检索代码
[self performSelector:@selector(poiSearch) withObject:nil afterDelay:2];
//5.设置地图显示层级 3最大, 20最小
[_mapView setZoomLevel:16];
}
#pragma mark POI检索代码
- (void)poiSearch
{
//1. 初始化检索对象
_searcher =[[BMKPoiSearch alloc]init];
_searcher.delegate = self;
//2. 发起检索 --> 拼接参数
BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc]init];
//分页索引,可选,默认为0
option.pageIndex = 0;
//分页数量,可选,默认为10,最多为50
option.pageCapacity = 10;
option.location = CLLocationCoordinate2DMake(39.915, 116.404);
option.keyword = @"小吃";
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) {
//在此处理正常结果
// 添加大头针 / 显示一个列表给用户
for (BMKPoiInfo *poiInfo in poiResultList.poiInfoList) {
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(@"error: %zd",error);
NSLog(@"抱歉,未找到结果");
}
}
- (void)viewWillAppear:(BOOL)animated
{
[_mapView viewWillAppear];
_mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
- (void)viewWillDisappear:(BOOL)animated
{
[_mapView viewWillDisappear];
_mapView.delegate = nil; // 不用时,置nil
_searcher.delegate = nil; //不使用时将delegate设置为 nil
}
@end
#import "ViewController.h"
#import "UMSocial.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
}
#pragma mark 点击屏幕开始分享
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//注意:分享到微信好友、微信朋友圈、微信收藏、QQ空间、QQ好友、来往好友、来往朋友圈、易信好友、易信朋友圈、Facebook、Twitter、Instagram等平台需要参考各自的集成方法
[UMSocialSnsService presentSnsIconSheetView:self appKey:@"566bd24067e58edfe800960e" shareText:@"你要分享的文字"
shareImage:[UIImage imageNamed:@"icon.png"]
shareToSnsNames:[NSArray arrayWithObjects:UMShareToSina,UMShareToWechatSession,UMShareToQQ,UMShareToDouban, UMShareToEmail,nil]
delegate:nil];
}
#pragma mark 微博登录--> 第三方登录 --> SSO授权登录
- (IBAction)weiboLoninClick:(id)sender {
UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];
snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
// 获取微博用户名、uid、token等
if (response.responseCode == UMSResponseCodeSuccess) {
UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];
NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);
}});
}
#pragma mark 获取微博用户信息
- (IBAction)onGetUserInfoClick:(id)sender {
//获取accestoken以及新浪用户信息,得到的数据在回调Block对象形参respone的data属性
[[UMSocialDataService defaultDataService] requestSnsInformation:UMShareToSina completion:^(UMSocialResponseEntity *response){
NSLog(@"SnsInformation is %@",response.data);
}];
// 在此方法中, 我们可以获取微博用户的部分信息, 我么可以将信息获取出来, 然后悄悄的执行注册接口, 自家的后台数据就有了这个账号
//将来公司有注册接口: 比如说要传入UID Uname image
}
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//进行分享、授权操作需要在第三方平台创建应用并提交审核,友盟默认提供了大多数平台的测试账号,但如果需要将分享、授权来源、分享到QQ、Qzone的icon更改为自己APP的应用,就需要自己申请第三方账号。
// 授权过程
[UMSocialData setAppKey:@"友盟APPKEY"];
//打开新浪微博的SSO开关,设置新浪微博回调地址,这里必须要和你在新浪微博后台设置的回调地址一致。若在新浪后台设置我们的回调地址,“http://sns.whalecloud.com/sina2/callback”,这里可以传nil
[UMSocialSinaHandler openSSOWithRedirectURL:@"http://sns.whalecloud.com/sina2/callback"];
return YES;
}
#pragma mark 此方法用于处理应用间的跳转
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [UMSocialSnsService handleOpenURL:url];
if (result == FALSE) {
//调用其他SDK,例如支付宝SDK等
}
return result;
}
SSO授权的前提: 必须有对应的第三方程序
SSO指单点登录,当用户安装了对应第三方客户端且登录时,可以在登录时免去输入账号密码的过程
1. 导入对应的文件夹
2. 配置URL schemes : 格式为“sina.”+友盟appkey
3. PPdelegate中集成新浪微博开关
4. APPdelegate中实现回调方法
第三方登录主要用于简化用户登录流程,通过用户拥有的微博、QQ、微信等第三方账号进行登录并且构建APP自己的登录账号体系。
1. 在新浪微博登录按钮中实现指定的方法
2. 如果想获取详细信息, 可以继续调用友盟的接口
3. 如果自己的服务器希望保存用户的数据, 那么应该自行执行注册用户的接口
一. 流程对比:
OAuth: 当前程序 —> 网页为载体 —> 发请求, 用户输入账号和密码, 自己处理获取Access_token
SSO: 必须有第三方的应用程序 —> 在第三方应用程序完成授权 —> 一键授权(如果已经登录)
二. SSO优势:
- 节省用户时间(账号密码超长, 输错, 忘记密码)
- 保护用户信息安全 —> 完全不用输入账号密码
- 减少用户在任何一个环节的流失率 —> 约简单越好
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
</array>
github地址: https://github.com/FuThD