iOS 创建 Universal Links【修订】

本文涉及的产品
.cn 域名,1个 12个月
简介: iOS 创建 Universal Links【修订】

前言

When you support universal links, iOS users can tap a link to your website and get seamlessly redirected to your installed app without going through Safari. If your app isn’t installed, tapping a link to your website opens your website in Safari.

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html

在wap中唤起app最广泛使用的方式并不是Universal Link,而是直接Schema跳转

location.href = 'schema://公众号:iOS逆向'

在 iOS9 之前,要在浏览器中唤醒 App,我们通常使用 scheme。这种方式需要提前判断系统中是否安装了能够响应此scheme的App,并且这种方式在微信被禁用。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation API_DEPRECATED_WITH_REPLACEMENT("application:openURL:options:", ios(4.2, 9.0)) API_UNAVAILABLE(tvos){
    if ([[url absoluteString] hasPrefix:@"schema://"]) {
        [[xxx sharedInstance] operationFromRouteURL:[url absoluteString]];//路由
        return YES;
    }
}

Universal Links 可以链接到您应用中的内容并安全地共享数据。

Universal Links 是标准 HTTP 或 HTTPS 链接,因此既适用于网站,也适用于应用程序。

  1. 如果未安装您的应用程序,则系统会在 Safari 中打开URL,以使您的网站能够处理它。浏览器可以正常跳转,因此在没装App的时候,不会像schema出现网页无效的框.
  2. 当用户安装您的应用程序时,iOS 会检查存储在Web服务器上的文件,以验证您的网站是否允许您的应用程序代表其处理URL

image.png

I 、Adding support for universal links

  1. Create an apple-app-site-association file that contains JSON data about the URLs that your app can handle.
  2. Upload the apple-app-site-association file to your HTTPS web server. You can place the file at the root of your server or in the .well-known subdirectory.
  3. Prepare your app to handle universal links.

1.1 Creating and Uploading the Association File

https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

文件为json保存为文本即可

你的域名必须支持Https

域名根目录下放这个文件apple-app-association,不带任何后缀

官方测试地址:https://search.developer.apple.com/appsearch-validation-tool/

https://oia.zhihu.com/apple-app-associationhttps://oia.zhihu.com/apple-app-site-association

image.png

{
  "applinks": {
    "apps": [
    ],
    "details": {
      "8J52SRPW6X.com.zhihu.ios": {
        "paths": [
          "*"
        ]
      },
      "886PYH8YW5.com.zhihu.ios": {
        "paths": [
          "*"
        ]
      },
      "B6MTNRMU2Y.com.zhihu.ios": {
        "paths": [
          "*"
        ]
      },
      "B6MTNRMU2Y.com.zhihu.ios-dev": {
        "paths": [
          "*"
        ]
      }
    }
  },
  "webcredentials": {
    "apps": [
      "8J52SRPW6X.com.zhihu.ios",
      "886PYH8YW5.com.zhihu.ios",
      "B6MTNRMU2Y.com.zhihu.ios",
      "B6MTNRMU2Y.com.zhihu.ios-dev"
    ]
  },
  "activitycontinuation": {
    "apps": [
      "8J52SRPW6X.com.zhihu.ios",
      "886PYH8YW5.com.zhihu.ios",
      "B6MTNRMU2Y.com.zhihu.ios",
      "B6MTNRMU2Y.com.zhihu.ios-dev"
    ]
  }
}

1.2 Preparing Your App to Handle Universal Links

  1. 工程配置Associated Domains

image.png

  1. 编写App被唤醒后的处理逻辑
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *webUrl = userActivity.webpageURL;
        [self handleUniversalLink:webUrl]; // 转化为App路由
    }
    return YES;
}
- (void)handleUniversalLink:(NSURL*)webUrl{
        NSString *host = webpageURL.host;
        if ([host isEqualToString:@"apple..com"]) {
            //进行我们需要的处理
        }
        else {
            [[UIApplication sharedApplication]openURL:webpageURL];
        }
}

II、注意事项

2.1 跨域

  1. iOS 9.2 之前,不用跨域都可以跳转, iOS 9.2 之后,必须跨域才能进行跳转到原生 App 上。
  2. iOS只会在 App 第一次启动时请求一次 apple-app-site-association 文件,服务器上该文件的更新不会让 iOS 本地的文件同步更新。

例子:为了解决苹果强制要求跨域才生效的问题,Universal Link就不能配置在主域名下,于是知乎才会准备一个oia.zhihu.com域名,专为Universal Link使用,

2.2 多业务线共用同一个 apple-app-association

多业务线共可以简单的把json file 进行merge, 共用同一个 apple-app-association

2.3 iOS拉取apple-app-association的时机

  1. 每次App安装后的第一次Launch,会拉取apple-app-association
  2. 除此之外在Appstore每次App的版本更新后的第一次Launch,也会拉取apple-app-association。

也就是说,让新的apple-app-association生效的方式是可以将App再发一个版本

III、iOS防止在WKWebView中打开Universal Link

Prevent universal links from opening in WKWebView

iOS防止在WKWebView中打开Universal Link

———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权>协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/z929118967/article/details/119813220

see also

目录
相关文章
|
JSON iOS开发 开发者
uniapp配置ios的Universal Link和associate domains
uniapp配置ios的Universal Link和associate domains
|
3月前
|
iOS开发 开发者
iOS微信分享配置universal links步骤
iOS微信分享配置universal links步骤
1392 58
|
Web App开发 前端开发 Android开发
iOS 唤起 APP: Universal Link(通用链接)(下)
iOS 唤起 APP: Universal Link(通用链接)(下)
1321 0
iOS 唤起 APP: Universal Link(通用链接)(下)
|
iOS开发 开发者
iOS schem 和 Universal Link 在调试时的踩坑记录
iOS schem 和 Universal Link 在调试时的踩坑记录
iOS schem 和 Universal Link 在调试时的踩坑记录
iOS14 Universal Link隐藏顶部横幅方法
iOS14 Universal Link隐藏顶部横幅方法
92 0
|
存储 数据安全/隐私保护 开发者
iOS创建苹果证书、制作p12证书流程
iOS创建苹果证书、制作p12证书流程
iOS创建苹果证书、制作p12证书流程
|
前端开发 iOS开发
React Native | 创建IOS原生模块
React Native | 创建IOS原生模块
381 0
|
存储 数据安全/隐私保护 开发者
iOS创建苹果证书、p12证书申请流程
iOS创建苹果证书、p12证书申请流程
iOS创建苹果证书、p12证书申请流程
|
程序员 开发者 iOS开发
iOS开发:苹果开发者账号第一次新建APP ID以及创建App的步骤
在iOS开发过程中,关于苹果开发者账号相关操作的知识点也是不可忽视的,尤其是对于一些刚接触苹果开发的开发者来说,更应该多了解一些关于苹果开发者账号的知识点,这样有利于App的测试和上架。
1174 0
iOS开发:苹果开发者账号第一次新建APP ID以及创建App的步骤
|
安全 数据安全/隐私保护 iOS开发
uniapp开发,window下创建ios打包证书的详情流程
uniapp开发,window下创建ios打包证书的详情流程