移动应用间跳转,可通过scheme的方式进行
1、URL Scheme概念
URL Scheme 就是一个可以让 app 相互之间可以跳转的协议。每个 app 的 URL Scheme 都是不一样的,如果存在一样的 URL Scheme,那么系统就会响应先安装那个 app 的 URL Scheme,因为后安装的 app 的 URL Scheme 被覆盖掉了,是不能被调用的。
运用URL : 统一资源定位符
scheme协议头(必须):决定查找应用的方式, 如http://、ftp://、tel://、file://
host宿主(可选):如www.xxx.com、自定义等
path路径(可选):设置资源路径,如/path等
param参数(可选):如?param1=xxx等
如scheme + host,http://www.xxx.com,是用http协议访问具体协议具体网页。
2、设置方式
默认情况下应用程序是没有自己的URL Scheme的,如果想要拥有自己应用的URL Scheme,则需要设置。
以iOS项目为例,项目 -> info -> URL Types -> URL Scheme
3、打开方式
跳转到其他应用程序方法,如:
(1)打电话 tel://
(2)发短信: sms://
(3)发邮件 mailTo://
(4)打开网址http://
代码中设置需跳转的URL方法:
NSURL *url = [NSURL URLWithString:@"schemexxx://hostxxx/pathxxx?paramxxx=202102"];
/**
url.scheme // scheme
url.host // 宿主
url.path // 路径
url.query // 参数
*/
判断本机是否安装了目标程序:
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
NSLog(@"没有安装目标应用");
}
4、对方APP执行的接收方法
// 只要是由其他应用程序打开的,就会调用该方法
// URL为其他应用打开当前应用时使用的URL
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
// openURL 是打开当前应用的url
// sourceApplication 是打开当前应用的源应用的BundleId
/*
提示:一旦重写了新方法,旧方法就不再被执行
但对于很多第三方框架,都建议两个方法全都写
*/
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
5、对于iOS9.0跳转适配
在info.plist文件中添加LSApplicationQueriesSchemes字段,可以添加为数组
需添加 LSApplicationQueriesSchemes的key,以及添加对应URL的scheme
6、跳回原应用方法
如一个灵活的方法,发起调用的源应用在 Scheme 后面加一个参数 back_scheme=scheme_a,这样目标应用就知道了需要返回信息给源应用,源应用和目标应用这种自定义协议也可称作伪协议,双方应用间互相自己约定即可。