iOS開發過程中,我們經常碰到應用間跳轉的情景:
1、使用第三方用戶登錄,跳轉到需授權的App或跳轉到分享app的對應頁面
*需要用戶授權,還需要"返回到調用的程序,同時返回授權的用戶名、密碼";
2、應用程序推廣,跳轉到另一個應用程序(本機已經安裝);
3、跳轉到iTunes並顯示應用程序下載頁面(本機沒有安裝);
4、第三方支付,跳轉到第三方支付App,如支付寶支付,微信支付;
5、使用系統內置程序,如跳轉到打電話、發短信、發郵件、Safari等
應用間跳轉原理:若應用A跳轉到應用B,則給A、B自身自定義URL Schemes(自定義的協議頭)后,通過在A中處理B的URL Schemes,就可以在A中啟動B了。
注:iOS9之后,應用間跳轉需要在Info.plsit中設置白名單。以 ‘LSApplicationQueriesSchemes’為Key值,對應數組value中添加白名單應用的URL Schemes即可。若未設置白名單,會報錯,值得我們注意:
-canOpenURL: failed for URL: "應用B的URL Schemes://" - error: "This app is not allowed to query for scheme 應用B"
以下例子均以系統高於iOS9為例。
例一:應用A跳轉到應用B
AppA自定義URL Schemes,且在應用A的Info.plist中設置白名單,添加應用B的URL Schemes
跳轉代碼:
例二:應用A跳轉到應用B指定界面
A中跳轉響應事件:
應用B捕捉到被其他應用打開:
系統版本小於iOS9
系統版本大於iOS9
例三:應用B反跳轉回應用A
1、 步驟分析:從B再跳轉回A,那么在A跳轉到B的時候,還應將應用A的URL Schemes傳遞過來。這樣我們才能指定返回哪個應用程序(iOS9之后,該應用一定要添加到白名單內)
指定一個傳遞URL的規則:協議頭://應用B的URL Schemes?應用A的URL Schemes。即:AppB://One?AppA。
說明:
AppB是跳轉過來的應用App-B的URL Schemes;
One是用來區別跳轉頁面的標識;
? 是分割符;
AppA是跳轉回的應用App-A的URL Schemes
2、我們根據傳遞來的數據,進行反跳回去。跳轉頁面設置一個屬性保存傳遞的字符串
@property (nonatomic, copy) NSString *urlString;
AppA中的修改:
AppB中的修改:
1.修改AppDelegate代理方法:
2.分別修改OneVc和TwoVc控制器
參考:iOS應用間跳轉