IT源码网

移动应用间跳转的方法

wyy 2021年04月03日 程序员 389 0

移动应用间跳转,可通过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,这样目标应用就知道了需要返回信息给源应用,源应用和目标应用这种自定义协议也可称作伪协议,双方应用间互相自己约定即可。

 

评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!