與Android的URL Scheme相似,是爲方便app之間互相調用而設計的。你能夠經過一個相似URL的連接,經過系統的OpenURl來打開該app,並能夠傳遞一些參數。每一個URL必須能惟一標識一個APP,若是你設置的URL與別的APP的URL衝突,此時,你的APP不必定會被調用起來,緣由是當APP在安裝的時候就已經在系統裏面註冊了此APP的URL Scheme,若是你的一致可是是後安裝的,那麼系統不會調用你的APP,由於你的APP設置的URL scheme被覆蓋了。微信
固然系統的APP的URL Scheme是優先級高的,不用想着能覆蓋系統APP的URL Scheme的註冊調用。app
你們知道在IOS系統裏面APP之間是相互隔離的,不像Android,每一個組件均可以做爲一個獨立的功能被其餘APP調用,可是,IOS系統裏面也須要完成相似於三方功能如支付、搜索跳轉、導航等等跨APP的功能,怎麼實現呢,蘋果就使用了URL Scheme來實現了這個功能。經過各個APP設計的符合蘋果的統一規範的URL Scheme,系統就會自動去調用相關的APP來完成你的請求。ide
好比:咱們的APP須要使用支付寶的三方支付功能、個人APP須要使用微信分享好的文章,那麼此時就能夠經過URL Scheme來傳遞這些數據到支付寶APP或者微信APP,系統會經過這些APP的URL Scheme來調起這些APP,完成你所須要作的跨APP的功能。url
假若有2個應用程序A和B,在B程序的 Info.plist 添加一個 URL types 節點,如圖:spa
以後在A程序調用設計
/**對象
* 打開B程序界面支付寶
*/it
- (IBAction)openSinaio
{
// 每一個程序均可以擁有一個本身惟一的URL
// URL組成: 協議頭://主機/路徑
// http://
// file://
// ftp://
// ...
// 1.獲取application對象
UIApplication *app = [UIApplication sharedApplication];
// 2.建立須要打開的應用程序的URL
// 在應用程序跳轉中, 只要有協議頭便可, 路徑無關緊要
NSURL *url = [NSURL URLWithString:@"sina://login?myScheme=wangyi"];
// 3.利用application打開URL
if ([app canOpenURL:url]) {
// 3.1判斷是否能夠打開
[app openURL:url];
}else
{
// 3.2打開App STORE下載
NSLog(@"根據App id打開App STORE");
}
}
就能成功跳轉到指定url的應用程序了.
以後還會調用A程序的appdeleage方法
/**
* 當被其餘應用程序經過URL打開時就會調用
* @param application 當前的應用程序
* @param url 打開當前程序的URL
* @return 是否成功處理
*/
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
/**
* 當被其餘應用程序經過URL打開時就會調用(新方法)
*
* @param application 當前的應用程序
* @param url 打開當前程序的URL
* @param sourceApplication 打開當前程序的Bundle identifier
* @param annotation
* @return 是否成功處理
*/
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;