前言
常用一些app的分享功能,好比點擊QQ分享,就從app打開(跳轉到)QQ,而後分享完以後又回到咱們的app,那麼這是怎樣實現的呢?app
假設有這麼一個需求,由app1跳轉到app2,當app2完成任務以後,要把app2中的某些信息傳到app1中(假設咱們本身的程序是app1)測試
過程
咱們建立兩個新的工程,一個叫Test1,一個叫Test2。url
本篇文章將使用Test1
做爲第一個app的URL Schemes
,Test2
做爲第二個app的URL Schemes
。spa
Test1工程配置
因爲iOS9.0以後跳轉URL Schemes
須要將添加白名單
對於URL Schemes
中的Test1是本應用留給其餘應用調用的。日誌
Test2工程配置
對於URL Schemes
中的Test2是本應用留給其餘應用調用的。code
Test1工程中測試代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Test2是在Test2這個項目的info.plist中配置的URL Schemes if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test2://"]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test2://success=1&&name=test2"]]; } return YES; } - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSString *str = [[url host] stringByRemovingPercentEncoding]; NSLog(@"%@---%@",str, url.absoluteString); return YES; }
咱們首先須要判斷手機是否安裝了應用Test2,經過Test2工程公開的URL Schemes
來判斷,即Test2://
。須要傳參數時,是經過URL參數來傳的。如:Test2://success=1&&name=test2
就是一個URL。orm
Test2工程中測試代碼
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { NSString *str = [[url host] stringByRemovingPercentEncoding]; NSLog(@"%@---%@",str, url.absoluteString); [self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2]; return YES; } - (void)goBackToApp1 { if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test1://"]]) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test1://loginSuccess=1"]]; } }
咱們在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
處理來自Test1應用的調用,獲取到相應的參數了。string
當咱們處理數據完成,須要反饋給Test1時,就須要調用經過Test1://loginSuccess=1
調用回到Test1並將狀態帶回去。it
Test1打印日誌
2016-06-05 23:23:09.807 test1[1277:219009] loginSuccess=1---Test1://loginSuccess=1
說明參數能從Test2正確地傳遞過來。io
Test2打印日誌
2016-06-05 23:22:15.008 test2[1243:216871] success=1&&name=test2---Test2://success=1&&name=test2
說明參數能從Test1正確地傳遞過來。