美文网首页
URL Schemes 实现APP之间的跳转

URL Schemes 实现APP之间的跳转

作者: Gary_fei | 来源:发表于2016-07-05 16:35 被阅读0次

简述

通过对比网页链接来理解iOS上的URL Schemes,应该就容易多了
URL Schemes 有两个单词:

  • URL:我们都很清楚,http://www.apple.com 就是个URL,我们也叫他链接或网址
  • Schemes:表示的是一个URL中的一个位置——最初始的位置,即://之前的那段字符。比如http://www.apple.com 这个网址的Schemes是http。
    根据我们上面对URL Schemes的使用,我们可以很轻易地理解,在以本地应用为主的iOS上,我们可以像定位一个网页一样,用一种特殊的URL来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的URL的Schemes部分,也就是开头儿那部分。比如短信,就是 sms:
    你可以完全按照理解一个网页的 URL ——也就是它的网址——的方式来理解一个 iOS 应用的 URL,拿苹果的网站和 iOS 上的微信来做个简单对比:
    通过对比网页链接来理解 iOS 上的 URL Schemes,应该就容易多了。
网页(苹果) iOS 应用(微信)
网站首页/打开应用 http://www.apple.com weixin://
子页面/具体功能 http://www.apple.com/mac/(Mac页面) weixin://dl/moments(朋友圈)

实例:

  • 首先创建A,B两个app,通过A的点击事件跳转到B
    项目中URL Schemes配置(被跳转端B)


    URL Schemes配置
  • 说明:
    1. URL Type:表示可以被这些带前缀URL打开,而不是可以打开这些带前缀URL的app。
    2. identifier:表示一个标识符,自己随便写(我通常写公司的反转域名)
    3. URL Schemes:用来定位一个应用

prefs:实现跳转至苹果内置程序的url scheme,不可改变
appA:标识该应用程序的url scheme,尽量保持它的唯一性,可以被appA打开

或者直接在info.plist中设置Information Property List:


info设置
  • 说明:
    URL Schemes:是一个数组,可以定义多个应用的URL Schemes
  1. 在应用A的跳转按钮中设置跳转代码:
    - (void)jumpB:(id)sender
    {
    //无参数
    NSURL *url1 = [NSURL URLWithString:@"appB:"];
    [UIApplication shareApplication] openURL:url1];
    //有参数
    NSString *paramStr =[NSString stringWithFormat:@"appB://username=%@&password=%@", @"小刘", @"123"];
    NSURL *url2 = [NSURL URLWithString:[paramStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    [UIApplication shareApplication] openURL:url2];
    }
    点击之后就可以实现跳转应用B
  2. 在打开应用B的过程中,此时应用B有两种状态:
    • 第一个状态: 应用B还没有启动,打开过程中就会去启动,触发下面的方法
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
      NSLog(@"didFinishLaunchingWithOptions---B");
      return YES;
      }
    • 第二个状态: 应用B已经启动了,但是在后台运行或者挂起,这个时候不会调用该方法。
  3. 如果一个应用被另外一个应用打开, 在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation中判断唤起的来源source app,根据Url所携带的参数进行不同的操作。比如跳转到制定的页面,相关的逻辑处理等等.
    //当一个应用程序被其他程序打开的时候会调用这个方法,在该方法中可以实现两个应用程序间的数据局传递
    //当一个应用程序被其他程序打开的时候会调用这个方法,在该方法中可以实现两个应用程序间的数据局传递
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
    NSString *urlStr = [url absoluteString];
    if ([urlStr hasPrefix:@"appB://"]) {
    NSLog(@"appA request params: %@", urlStr);
    urlStr = [urlStr stringByReplacingOccurrencesOfString:@"appB://" withString:@""];
    NSArray *paramArray = [urlStr componentsSeparatedByString:@"&"];
    NSLog(@"paramArray: %@", paramArray);
    NSMutableDictionary *paramsDic = [[NSMutableDictionary alloc] initWithCapacity:0];
    for (int i = 0; i < paramArray.count; i++) {
    NSString *str = paramArray[i];
    NSArray *keyArray = [str componentsSeparatedByString:@"="];
    NSString *key = keyArray[0];
    NSString *value = keyArray[1];
    [paramsDic setObject:value forKey:key];
    NSLog(@"key:%@ ==== value:%@", key, value);
    }
    }
    return NO;
    }

注意:在iOS9之后,还需要在info.plist中添加LSApplicationQueriesSchemes设置为Array,以此来提高app的安全性,需要设置URL Schemes白名单,在白名单里面的才能打开app

白名单

附:

  • 常见的调用系统应用url
    // 关于本机
    About — prefs:root=General&path=About
    // 辅助功能
    Accessibility — prefs:root=General&path=ACCESSIBILITY
    // 飞行模式
    Airplane Mode On — prefs:root=AIRPLANE_MODE
    // 自动锁屏
    Auto-Lock — prefs:root=General&path=AUTOLOCKB
    // 调节设备背景亮度
    rightness — prefs:root=Brightness
    // 蓝牙
    Bluetooth — prefs:root=General&path=Bluetooth
    // 时间与日期
    Date & Time — prefs:root=General&path=DATE_AND_TIME
    // FaceTime
    FaceTime — prefs:root=FACETIME
    // 通用
    General — prefs:root=General
    // 键盘
    Keyboard — prefs:root=General&path=Keyboard
    // iCloud
    iCloud — prefs:root=CASTLE
    // iCloud存储空间
    iCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUP
    // 语言与区域
    International — prefs:root=General&path=INTERNATIONAL
    // 定位服务
    Location Services — prefs:root=LOCATION_SERVICES
    // 音乐
    Music — prefs:root=MUSICMusic
    Equalizer — prefs:root=MUSIC&path=EQ
    Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit
    // 网络
    Network — prefs:root=General&path=Network
    Nike + iPod — prefs:root=NIKE_PLUS_IPOD
    // 备忘录
    Notes — prefs:root=NOTES
    // 通知
    Notification — prefs:root=NOTIFICATIONS_ID
    // 电话
    Phone — prefs:root=Phone
    // 照片
    Photos — prefs:root=Photos
    // 描述文件
    Profile — prefs:root=General&path=ManagedConfigurationList
    // 还原
    Reset — prefs:root=General&path=Reset
    // Safari
    Safari — prefs:root=SafariSiri — prefs:root=General&path=Assistant
    // 声音
    Sounds — prefs:root=Sounds
    // 软件更新
    Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK
    // iTunes Store 与 APP Store
    Store — prefs:root=STORE
    // Twitter
    Twitter — prefs:root=TWITTER
    // Usage
    Usage — prefs:root=General&path=USAGE
    // VPN
    VPN — prefs:root=General&path=Network/VPN
    // 墙纸
    Wallpaper — prefs:root=Wallpaper
    // WIFI
    Wi-Fi — prefs:root=WIFI
    、、、

  • 当你的应用在iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:
    <key>LSApplicationQueriesSchemes</key>
    <array>

    <string>wechat</string>
    <string>weixin</string>

        <!-- 新浪微博 URL Scheme 白名单-->
        <string>sinaweibohd</string>
        <string>sinaweibo</string>
        <string>sinaweibosso</string>
        <string>weibosdk</string>
        <string>weibosdk2.5</string>
    
        <!-- QQ、Qzone URL Scheme 白名单-->
        <string>mqqapi</string>
        <string>mqq</string>
        <string>mqqOpensdkSSoLogin</string>
        <string>mqqconnect</string>
        <string>mqqopensdkdataline</string>
        <string>mqqopensdkgrouptribeshare</string>
        <string>mqqopensdkfriend</string>
        <string>mqqopensdkapi</string>
        <string>mqqopensdkapiV2</string>
        <string>mqqopensdkapiV3</string>
        <string>mqzoneopensdk</string>
        <string>wtloginmqq</string>
        <string>wtloginmqq2</string>
        <string>mqqwpa</string>
        <string>mqzone</string>
        <string>mqzonev2</string>
        <string>mqzoneshare</string>
        <string>wtloginqzone</string>
         <string>mqzonewx</string>
        <string>mqzoneopensdkapiV2</string>
        <string>mqzoneopensdkapi19</string>
        <string>mqzoneopensdkapi</string>
        <string>mqzoneopensdk</string>
    
        <!-- 支付宝  URL Scheme 白名单-->
        <string>alipay</string>
        <string>alipayshare</string>
    
    </array>
    

友情参考:
phzean
ZeroIG

相关文章

  • URL Schemes 实现APP之间的跳转

    简述 通过对比网页链接来理解iOS上的URL Schemes,应该就容易多了URL Schemes 有两个单词: ...

  • app之间跳转_URL Schemes

    前言:1.告诉别人怎么跳到自己这边(设置schemes)2.告诉自己可以跳转到那个人那边(ios9之后 才有这个 ...

  • iOS开发之App之间的跳转

    一.设置需要跳转到的App的URL Scheme 设置该App的URL Schemes 二.配置要跳转App的跳转...

  • iOS URL Schemes实现APP之间的跳转

    一、应用场景 我们的APP有时候想直接去到设置页面,程序退到后台进入设置页面然后又重新打开,这样子总是感觉多做了很...

  • iOS URL Schemes 系统App清单

    苹果系统自带App跳转URL Schemes ,欢迎大家补充 1.AMSEngagementViewService...

  • OpenUrl

    iOS-使用URL Schemes,进行应用之间跳转iOS - JLRoutes路由跳转官方文档JLRoutes ...

  • 不同应用间的跳转

    mark: iOS中scheme详解 iOS-使用URL Schemes,进行应用之间跳转 iOS 设置URL S...

  • APP调用本机第三方APP

    什么是URL Schemes? URL Schemes是苹果给出的用来跳转到系统应用或者跳转到别人的应用的一种机制...

  • iOS URL Types和LSApplicationQueri

    一、踩坑反思 起因:调试跳转第三方App时,无法跳转。 过程:在URL Types中添加Schemes进行模拟跳转...

  • JLRoutes的使用说明

    JLRoutes原理: 1.它是通过url scheme来实现app内部,web到app,app与app之间跳转的...

网友评论

      本文标题:URL Schemes 实现APP之间的跳转

      本文链接:https://www.haomeiwen.com/subject/zmbhjttx.html