• 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;

  • 相关阅读:
    在项目中运用到的导航高亮
    【转载】IE8 inlineblock容器不撑开问题(利用重绘解决)
    我的博客正式开通
    【转载】响应式网页设计的9条基本原则
    一款不错的在线SVG制作工具
    【转载】前端不为人知的一面前端冷知识集锦
    11.3 Daily Scrum
    11.11 Daily Scrum
    11.7 Daily Scrum(周末暂停两天Daily Scrum)
    11.12 Daily Scrum(保存草稿后忘了发布·····)
  • 原文地址:https://www.cnblogs.com/tate-zwt/p/4396132.html
Copyright © 2020-2023  润新知