在 iOS 裏,程序之間都是相互隔離,目前並無一個有效的方式來作程序間通訊,幸虧 iOS 程序能夠很方便的註冊本身的 URL Scheme,這樣就能夠經過打開特定 URL 的方式來傳遞參數給另一個程序。html
例如在 iPad 上瀏覽網頁,而且 iPad 已經安裝了 淘寶 HD,那麼就打開下面這個連接就會在淘寶 HD 中查看這個商品的詳細信息,也能夠方便的使用淘寶 HD 進行購買、收藏等操做。app
配置ide
配置url
要爲 iOS 程序添加自定義協議的支持是一件很方便的事,只須要在程序的 Info.plist 添加一個 URL types 節點就能夠了。在這個節點裏,能夠設置這個程序所支持的自定義協議名稱,像 http、ftp 這種,通常咱們能夠設置爲程序英文名稱,像淘寶客戶端中就設置了 taobao,這樣 taobao:// 這個形式的 URL 就會關聯到淘寶客戶端的 App。spa
步驟爲code
1:若是沒有URL types,隨意點一個key行後面+號,輸入大寫URL選擇URL typeshtm
2:右鍵URL types,選擇add rowblog
3:item0下改爲url identifier,後面的value值隨意寫,com.xx,xx
開發
4:加一行,選擇url schemes,item後面值寫成你須要的,譬如上面的todolist,之後別的app就能夠用
string
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"todolist://"]];
啓動你的app。
實現
在 Info.plist 裏面設置完 URL types 以後,就能夠在程序中處理這類 URL 的打開請求了。
在外部程序中,若是打開了指定自定義協議的 URL,程序中 application delegate 的 application:handleOpenURL: 方法就會被調用,在這個方法裏,能夠獲取到觸發這個方法的 URL,能夠經過對這個 URL 進行判斷,例如根據不一樣的 Host,不一樣的 Query String 來執行不一樣的動做。
- (void)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 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]; } }
轉子:http://www.cocoachina.com/newbie/tutorial/2012/0529/4302.html