iOS 兩個App之間調起通信
前言
假設需求是這樣的:由一個app1跳轉到app2之後,app2完成某項任務之後,怎麼把app2的完成信息傳到app1(自己的程序是app1),傳的是什麼類型的數據,怎麼進行解析?
邏輯
本文章使用TestApp1作爲第一個app的URL Schemes,TestApp2爲第二個app的URL Schemes。
TestApp1工程配置
如下圖,要適配iOS9.0
:
對於URL Schemes
中的TestApp1
是本應用提供給其它應用調用的。
TestApp2工程配置
如下圖,要適配iOS9.0
:
對於URL Schemes
中的TestApp2
是本應用提供給其它應用調用的。
TestApp1工程中實現代碼測試
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
-
(BOOL)application:(UIApplication
*)application
didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions
{
//
TestApp2是TestApp2這個app在info.plist中配置的URL Schemes
if
([[UIApplication
sharedApplication]
canOpenURL:[NSURL
URLWithString:@"TestApp2://"]])
{
[[UIApplication
sharedApplication]
openURL:[NSURL
URLWithString:@"TestApp2://success=1&count=100"]];
}
return
YES;
}
-
(BOOL)application:(UIApplication
*)application
handleOpenURL:(NSURL
*)url
{
NSString
*receText
=
[[url
host]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@ %@",receText,
url.absoluteString);
return
YES;
}
|
我們首先需要判斷手機是否安裝了應用TestApp2
,通過TestApp2
工程公開的URL Schemes
來判斷,即TestApp2://
。需要傳參數時,是通過URL參數來傳的。如:TestApp2://success=1&count=100就是一個URL。
TestApp2工程中實現代碼測試
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
-
(BOOL)application:(UIApplication
*)application
handleOpenURL:(NSURL
*)url
{
NSString
*receText
=
[[url
host]
stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@ %@",receText,
url.absoluteString);
[self
performSelector:@selector(goBackToApp1)
withObject:nil
afterDelay:2];
return
YES;
}
-
(void)goBackToApp1
{
if
([[UIApplication
sharedApplication]
canOpenURL:[NSURL
URLWithString:@"TestApp1://"]])
{
[[UIApplication
sharedApplication]
openURL:[NSURL
URLWithString:@"TestApp1://paySuccess=1"]];
}
}
|
我們在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
處理來自TestApp1
應用的調用,獲取到相應的參數了。
當我們處理數據完成,需要反饋給TestApp1
時,就需要調用通過TestApp1://paySuccess=1
調用回到TestApp1
並將狀態帶回去。
TestApp1打印日誌
1
2
3
|
2015-12-03
22:30:10.250
TestApp1[9008:678123]
paySuccess=1 TestApp1://paySuccess=1
|
說明參數從TestApp2
正確的傳過來了。
TestApp2打印日誌
1
2
3
|
2015-12-03
22:29:59.690
TestApp2[9004:677942]
success=1&count=100 TestApp2://success=1&count=100
|
說明參數也能正確地從TestApp1
傳過來了。
最後
最近不少朋友問到我應用之間如何相互調用,又如何傳參數的問題,在這裏統一講解了。
源代碼
如果單看文章,看不太明白,可以到github下載源代碼運行看看效果:https://github.com/CoderJackyHuang/AppCommunicationDemo