URL Schemes

定义一个URL Schemes:

  1. 添加URL types: 点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。 2017051777096fix1.png

  2. 点击 Item 0 新增一行,从下拉列表中选择 URL Schemes,敲击键盘回车键完成插入。 (允许应用定义多个 URL schemes)

2017051771372fix2.png

  1. 此时可以用safari访问[TYRAD://]()

用其他应用访问app

有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作

判断是否能访问app [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TYRAD://"]] 访问app [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"]];

info.plist需要添加需要访问app的白名单:

<key>LSApplicationQueriesSchemes</key>
 <array>
    <!-- 微信 URL Scheme 白名单-->
    <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>

被访问的app

App delegate 解析得到的url即可

//iOS9以下
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    
    NSLog(@"9- %@",url);
    NSLog(@"URL scheme:%@", [url scheme]);
    return NO;
}

//iOS9以上
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
    
    NSLog(@"9+ %@",url);
    NSLog(@"URL scheme:%@", [url scheme]);
    return YES;
}

更新:

  • 2017年05月17日 修复失效的图片链接

Universal Links

大意是通过一个简单的网址就能唤起你的app,而不需要定制schema

参考出处:http://www.cocoachina.com/ios/20150902/13321.html

配置

  1. targets -> capabilities -> Associated Domains 添加需要用到域名(必须要有applinks:前缀) . 2017070288989123.png
  2. 服务端配置apple-app-site-association文件。web server 需要支持https,客户端需要通过https访问,并且不支持任何重定向。大概长这样:

    {
      "applinks": {
        "apps": [],
        "details": {
          "6N2JJHT3P2.com.tyrad.UnivsalLinksDemo": {
            "paths":[ "*" ]
          }
        }
      }
    }
    

    com.tyrad.UnivsalLinksDemo 为bundle Id,。 6N2JJHT3P2为TeamId, 可以从这里看到: https://developer.apple.com/account/#/membership
    App启动时会从指定的域名: https://domain.com/apple-app-site-association 下载这个文件。

  3. 代码中的配置比较简单,AppDelegate中实现相应的方法,再手动解析url参数实现对应操作即可:

    ```

    • (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler { if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
      NSLog(@“host = %@”,userActivity.webpageURL); NSLog(@“host = %@”,userActivity.webpageURL.host); //TODO: } return YES ; } ```

优点

  • 不需要设置白名单
  • 比较简单,网页 && app通用
  • 方便app内通信,比如微信内的跳转