URL Scheme

  • URL Scheme是什麼
  • URL Scheme有什麼做用
  • URL Scheme怎麼使用

URL Scheme是什麼

  因爲蘋果的app都是在沙盒中,相互是不能訪問數據的。可是蘋果仍是給出了一個能夠在app之間跳轉的方法:URL Scheme。簡單的說,URL Scheme就是一個可讓app相互之間能夠跳轉的協議。每一個app的URL Scheme都是不同的,若是存在同樣的URL Scheme,那麼系統就會響應先安裝那個app的URL Scheme,由於後安裝的app的URL Scheme被覆蓋掉了,是不能被調用的。app

URL Scheme有什麼做用

  那麼app之間的跳轉有什麼做用呢?咱們所使用的每個app就至關於一個功能,app的跳轉可使得每一個app就像一個功能組件同樣,幫助咱們完成須要作的事情,好比三方支付,搜索,導航,分享等等。ui

URL Scheme怎麼使用

  要跳轉到別人的app,就要知作別人的app的跳轉協議是什麼,須要傳入什麼參數,咱們常見的跳轉協議有下面這些:lua

1.打開Mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://info@icloud.com"]] 2.打開電話 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18688886666"]]; 3.打開SMS [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:18688886666"]];

  因此,若是咱們但願別人打開咱們的app,只要在plist文件中配置一下你的跳轉協議便可,以下圖所示:url


跳轉協議配置.jpg

  「emp601602://」就是個人跳轉協議了,編譯一下app,在safari中輸入「emp601602:// 」就能夠跳轉到個人app中。spa

設置過程代理

要設置訪問APP的URL Scheme,須要在info.plist中添加一個字段:`LSApplicationQueriesSchemes`,其值爲由String組成的Array類型,每個String表明一個URL Scheme。code

系統Log提示htm

當URL Scheme沒有設置成功時,使用canOpenURL或者openURL時,系統會打出Log:blog

`canOpenURL: failed for URL: "urlscheme://" - error: "This app is not allowed to query for scheme urlscheme"`ip

而當URL設置成功,但沒有找到相應的處理APP時,系統的Log是這樣的:`canOpenURL: failed for URL: "urlscheme://" - error: "(null)"`

 

設置以後的代理方法實現:

  「emp601602:// 」只能讓用戶跳轉到咱們的app,以後的處理是在appDelegate的代理中,代理方法以下:

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

  在這個方法裏,能夠獲取到觸發這個方法的 URL,能夠經過對這個 URL 進行判斷,例如根據不一樣的 Host,不一樣的 Query String 來執行不一樣的動做。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { NSLog(@"%@", [url absoluteString]); // 在 host 等於 item.taobao.com 時,說明一個寶貝詳情的 url, // 那麼就使用本地的 TBItemDetailViewController 來顯示 if ([[url host] isEqualToString:@"item.taobao.com"]) { // 這裏只是簡單地假設 url 形式爲 taobao://item.taobao.com/item.htm?id=12345678 // 先獲取要查看的寶貝詳情的 itemId NSString *itemId = [[url query] substringFromIndex:[[url query] rangeOfString:@"id="].location+3]; // 使用本地 ViewController 來顯示淘寶商品詳情 TBItemDetailViewController *controller = [[TBItemDetailViewController alloc] initWithItemId:itemId]; [self.navigationController pushViewController:controller animated:YES]; [controller release]; } }

  在你的動做執行完成了以後,有可能時須要返回到原有app的,這樣就須要你的app跳轉協議的url裏面應該能傳入調用者app的跳轉協議,這樣用戶跳轉到你的app完成動做後就能跳轉回去了。

 

 

引用:http://www.jianshu.com/p/eed01a661186

相關文章
相關標籤/搜索