前言
假设需求是这样的:由一个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