IOS应用程序的跳转和URL Scheme的使用

第一:什么是URL Scheme

   与Android的URL Scheme类似,是为方便app之间互相调用而设计的。你可以通过一个类似URL的链接,通过系统的OpenURl来打开该app,并可以传递一些参数。每个URL必须能唯一标识一个APP,如果你设置的URL与别的APP的URL冲突,此时,你的APP不一定会被调用起来,原因是当APP在安装的时候就已经在系统里面注册了此APP的URL Scheme,如果你的一致但是是后安装的,那么系统不会调用你的APP,因为你的APP设置的URL scheme被覆盖了。

当然系统的APP的URL Scheme是优先级高的,不用想着能覆盖系统APP的URL Scheme的注册调用。

 

第二:URL Scheme有什么作用:

大家知道在IOS系统里面APP之间是相互隔离的,不像Android,每个组件都可以作为一个独立的功能被其他APP调用,但是,IOS系统里面也需要完成类似于三方功能如支付、搜索跳转、导航等等跨APP的功能,怎么实现呢,苹果就使用了URL Scheme来实现了这个功能。通过各个APP设计的符合苹果的统一规范的URL Scheme,系统就会自动去调用相关的APP来完成你的请求。

比如:我们的APP需要使用支付宝的三方支付功能、我的APP需要使用微信分享好的文章,那么此时就可以通过URL Scheme来传递这些数据到支付宝APP或者微信APP,系统会通过这些APP的URL Scheme来调起这些APP,完成你所需要做的跨APP的功能。

 

第三:怎么使用呢?

假如有2个应用程序A和B,在B程序的 Info.plist 添加一个 URL types 节点,如图:

技术分享

 

之后在A程序调用

 

/**

 *  打开B程序界面

 */

- (IBAction)openSina

{

    // 每个程序都可以拥有一个自己唯一的URL

    // URL组成: 协议头://主机/路径

    // http://

    // file://

    // ftp://

    // ...

    // 1.获取application对象

    UIApplication *app = [UIApplication sharedApplication];

    // 2.创建需要打开的应用程序的URL

    // 在应用程序跳转中, 只要有协议头即可, 路径可有可无

    NSURL *url = [NSURL URLWithString:@"sina://login?myScheme=wangyi"];

    // 3.利用application打开URL

    if ([app canOpenURL:url]) {

        // 3.1判断是否可以打开

        [app openURL:url];

    }else

    {

        // 3.2打开App STORE下载

        NSLog(@"根据App id打开App STORE");

    }

    

}

 就能成功跳转到指定url的应用程序了.

之后还会调用A程序的appdeleage方法

 

/**

 *  当被其他应用程序通过URL打开时就会调用

 *  @param application 当前的应用程序

 *  @param url         打开当前程序的URL

 *   @return 是否成功处理

 */

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;

 

/**

 *  当被其他应用程序通过URL打开时就会调用(新方法)

 *

 *  @param application       当前的应用程序

 *  @param url               打开当前程序的URL

 *  @param sourceApplication 打开当前程序的Bundle identifier

 *  @param annotation

 *  @return 是否成功处理

 */

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。