相關app之間的跳轉可以參考<a >iOS開發--一步步教你徹底學會『iOS應用間相互跳轉』</a>,寫的挺詳細的,這里就不用做贅述了。
場景:我們一般會有分享,支付的功能,當我們分享或者支付完畢之后,是怎么跳轉回到我們的app的?
因為我們知道,在iOS9之后,相關的跳轉需要添加白名單,不添加白名單是跳轉不了的,我們跳轉微信,支付寶的時候,都是提前添加了相關需要跳轉app的url schemes到我們的白名單了。我們跳過去的時候雖然把我們自己的url scheme帶過去了,但是微信支付寶也不可能動態的將我們自己的url scheme添加到他們的白名單中。
先來看一下跳轉qq做的工作
1、添加白名單
2、操作代碼
// 將自己的url Schemes通過參數的形式傳遞過去,
NSString *urlStr = @"mqq://App-A";
NSURL *url = [NSURL URLWithString:urlStr];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
// 3. 打開應用程序
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"沒有安裝");
}
如果沒有添加qq的白名單,是跳轉不過去的,會報錯
-canOpenURL: failed for URL: "mqq://" - error: "This app is not allowed to query for scheme mqq"
通過實驗,其實白名單是對canOpenURL:方法起了限制。
直接寫,也是能夠跳過去的。
NSString *urlStr =@"mqq://App-A";
NSURL *url = [NSURL URLWithString:urlStr];
[[UIApplication sharedApplication] openURL:url];
所以,我們跳轉到qq,微信或者支付寶的時候,帶上自己的url schemes,qq微信或者支付寶將我們帶過去的參數url scheme保存了起來。等做完了相關的操作,觸發返回操作的時候,qq,微信或者支付寶應該是直接調用了
NSString *urlStr = @"我們的url schemes://";
NSURL *url = [NSURL URLWithString:urlStr];
[[UIApplication sharedApplication] openURL:url];
說到這里就明白了。
還有一個問題,為啥你跳轉到qq,微信,支付寶,他們就能直接調用** [[UIApplication sharedApplication] openURL:url];跳轉app,而不是先通過canOpenURL:**方法判斷一下?因為你跳都跳過去了,說明短時間你的應用是不會卸載的,直接跳轉肯定能跳轉回來。即使你在跳轉的前一步操作卸載了,你也得通過將qq壓入后臺,回到桌面,找到自己的應用的時候卸載吧,當你再回到qq的時候你會發現,qq的界面已經不是準備跳回的界面了,不給你返回的機會,這就是設計上避免了這種非正常的操作了。
最后獻上相關的<a >Demo</a>
App-A跳轉到App-B,跳轉的時候,App-A將自己的url Schemes當做參數傳遞給App-B,App-B獲取到App-A的url Schemes之后保存起來,可以直接返回App-A
注意:只有先通過App-A跳轉到App-B之后<App-B獲取到了App-A的url schemes>才能通過App-B跳轉回App-A。