應用之間的跳轉在做第三方登陸,分享的時候一般會用到。當設備安裝有指定的應用的時候,就可以從當前應用跳轉到指定應用,并且能夠傳遞消息。
iOS SDK 提供了一個叫做url scheme的機制來實現這個功能。
首先在被調用的應用中我們需要在項目的info.plist文件里添加一些信息
如圖所示配置即可。我們現在假設被調用的應用是B應用,正常運行的是A應用。
URL Schemes 這是是用來讓A應用來找到B應用的標志。
URL Identifier 這個不太確定是用來做什么的,我最后刪去了這條信息 還是可以正常跳轉。
自定義 URL Scheme 完全指南
這個時候已經配置完畢了。然后就用可以在A應用中來寫代碼 跳轉到B應用了。
NSURL * url = [NSURL URLWithString:@"mqq://"]; if ([[UIApplication sharedApplication] canOpenURL: url]) { [[UIApplication sharedApplication] openURL: url]; }
這里mqq是用來調QQ的。 如果只是單純的調用B應用。 urlString就應該是@"URL Schemes :" 如果要傳遞一些消息就應該是@"mqq://?name=jack&age=33"。 這樣就能順利調用B應用同時在B應用的AppDelegate里可以重寫這樣一個方法。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return YES; }
url 這個鏈接中存儲了跳轉的url scheme以及參數列表,我們通過[url scheme]方法獲取前者;用[url query]方法獲取?之后的參數列表。
這里我還發現一個問題。參數列表不能出現漢字,否則無法成功跳轉。
像騰訊或者新浪微博他們的文檔中應該有url scheme的傳值標準。
sourceApplication就是A應用的bundleID。
但是這個時候我并沒有成功調用起B應用。因為我漏掉了一件事情。 錯誤信息是這樣的。xxxx - error: "This app is not allowed to query for scheme xxxx"
。然后查閱了資料發現了問題的所在。
直接附上解決方法的博文。canOpenURL: failed for URL