百度地圖/社交分享/應用間的跳轉

weixin_34208283發表於2015-12-11

百度地圖

導航畫線本質上是在mapView上新增遮蓋物。資料交由蘋果處理(蘋果找高德地圖)

畫線可以分為三大步驟,每一步都必不可少:

1.定位

確定當前位置-->和前面講過的定位相同,建立位置管理器並請求使用者授權即可

2.請求目的地和當前位置間的折線(polyline)

請求折線的核心程式碼:

//初始化方向物件

MKDirections *direction = [[MKDirections alloc] initWithRequest:request];

[direction calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse * _Nullable response, NSError * _Nullable error) {

for (MKRoute *route in response.routes) {

//折線

MKPolyline *polyline = route.polyline;

[self.mapView addOverlay:polyline];

}

}];

由於這裡類比較多,記憶難度大,我建議同學們只記住上面的核心程式碼,反推出來即可。

****方向物件需要一個MKDirectionsRequest,根據source和destination傳入mapItem型別的當前位置和目的地位置

//方向請求

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];

//請求的當前位置

request.source = mapItem;

//請求的目的地位置

request.destination = destationItem;

****得到當前位置和目的地位置的mapItem和導航時方法相同.

3.建立渲染物物件

在mapView代理方法mapView: rendererForOverlay: 中根據折線建立渲染物,並設定顏色。

//折線渲染物

MKPolylineRenderer *polylineRenderer = [[MKPolylineRenderer alloc] initWithOverlay:overlay];

//折線顏色

polylineRenderer.strokeColor = [UIColor redColor];

返回渲染物交由系統處理:

return polylineRenderer;

分享

系統自帶分享使用  "<Social/Social>"框架

系統自帶分享分為三步

1.判斷分享是否可用

[SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo];

服務型別有:微博 騰訊微博 facebook 和 twitter四種型別 其中facebook和twitter在國內由於你懂得原因不能使用,騰訊微博現在發展太差,所以一般都使用微博服務

如果不可用,需要在系統設定中登入對應的微博賬號

2.建立分享控制器

SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo];

控制器可以預設 圖片  文字 和網址

微博可以定位,但是隻有在手機app上的微博詳情才能看到

3.彈出分享控制器

[self presentViewController:composeVC animated:YES completion:nil];

第三方分享(以友盟為例)

當我們整合第三方SDK時,一定要參考第三方的整合文件。以友盟為例.

1.  建立appKey

2.  下載並安裝SDK

3.  設定AppKey

4.  新增實現程式碼

如果是iOS9系統,還需要適配iOS9的HTTP傳輸安全問題

SSO登入分享

SSO指單點登入,當使用者安裝了對應第三方客戶端且登入時,可以在登入時免去輸入賬號密碼的過程,簡化分享流程

SSO協議無法在模擬器上實現(找不到對應的app)

實現微博SSO協議需要5個步驟

1.按友盟要求匯入第三方sina包

2.配置URL schemes

3.按友盟新增SSO授權開關 -->複製友盟官網程式碼

4.新增系統回撥 -->友盟官網方法過期,可用application:openURL:options: 代替

5.適配iOS9 參照友盟官網"適配iOS9系統" --> 信任白名單

應用間跳轉

應用跳轉是根據協議頭跳轉

A跳轉B,需要B增加URL Types ,A應用根據URL的協議頭跳轉

iOS8之前的跳轉方法:

//適配iOS9 需要配置plist檔案 -->新增應用白名單 -->info.plist新增LSApplicationQueriesSchemes陣列

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"]];

}

//iOS9可以使用 不需要配置plist檔案

if (![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"]]) {

NSLog(@"開啟失敗");

}

跳轉到指定介面

假設從A應用跳到B應用的指定介面,跳轉的思路是:1. 設定B應用segue線的ID;2. 在A應用中傳入協議頭和ID;3. 在B應用中取得傳入的URL並擷取4. 根據擷取的欄位跳轉指定介面

/*    下面三個方法是替代關係,都可以接收傳遞的url,建議都實現。  */

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{  

  return YES;

}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{

    return YES;

}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options

迴圈跳轉

A跳轉B後再跳回A的迴圈跳轉思路:

1.給A一個"唯一"的URL scheme以供跳轉

eg:  weixin.fdafdfe234

2.在A中將scheme和要跳轉B的協議頭處理拼接

//headerStr是協議頭  scheme是A的標識

urlStr = [NSString stringWithFormat:@"%@?%@",headerStr,scheme];

3.在B中處理傳來的url

//lastUrl是擷取出來的scheme

NSString *urlStr = [lastUrl stringByAppendingString:@"://"];

4.處理url得到scheme,並返回

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlStr]]

相關文章