IOS_OC_百度地圖與社交分享

前奏. 知識點介紹php

一. 導航和畫線ios

  1. 地圖畫線 (理解)

二. 百度地圖數組

  1. 集成百度地圖 (掌握)
  2. POI檢索 (掌握)

三. 社交分享微信

  1. 系統自帶分享 (瞭解)
  2. 友盟分享 (掌握)
  3. SSO受權 (理解)

 

一. 導航和畫線網絡

1. 地圖畫線 (理解)框架

要進行畫線—-> 須要獲取起始點及終點位置—-> 建立方向對象計算路線—->獲取路線添加到地圖上—-> 設置渲染對象編碼

注意: 實現畫線, 須要請求用戶受權. 畫線時須要獲取用戶的當前位置, 此時, 就必須在當前程序中請求受權.spa

  • 建立地理編碼並執行編碼方法
  • 獲取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> 減小用戶在任何環節的流失率
相關文章
相關標籤/搜索