JHHK

欢迎来到我的个人网站
行者常至 为者常成

UniversalLinks

目录

介绍

Universal Link是Apple在WWDC上提出的iOS9的新特性之一;
能够方便的通过打开一个HTTPS链接来直接启动您的客户端应用,当然前提条件是您必须在手机上安装了此App;

应用场景:
1、从浏览器启动你的app
2、从其他App的WebView中拉起你的App
3、从其它app中拉起你的App

如何配置

第一步:开发者网站配置
找到”Associated Domains“选项,打开勾选;

第二步:配置Xcode Project
打开你的iOS工程,在project → Signing & Capabilities → + Capability,添加“Associated Domains”
添加配置,applinks:xdf.fzzqft.com

第三步:配置服务器
参考官方文档:https://developer.apple.com/documentation/xcode/supporting-associated-domains
img
在host域名对应的服务器.well-known目录下面新建一个json文件,命名为apple-app-site-association,不需要.json后缀
测试办法:例如你的{host}是xdf.fzzqft.com,那浏览器打开https://xdf.fzzqft.com/apple-app-site-association可以下载该文件即可

{
  "applinks": {
      "apps": [],
      "details": [
          {
              // teamid+bundleId
              "appID":"V6AMULB632.com.founder.xxx.mobile",
              // 标识了具体的app,此时该app的UniversalLink是:https://mcrm.founder.com/redirectApp/
              "paths": [ "/redirectApp/*"]
          },
          {
            "appID":"85YY7C36JS.com.founder.yyy.mobile",
            "paths": [ "/redirectApp/*"]
          }
      ]
  }
}

第四步:测试UL链接

根据服务器配置目录打开
https://xdf.fzzqft.com/.well-known/apple-app-site-association
https://xdf.fzzqft.com/apple-app-site-association

检查是否包含应用Bundle ID,可以参考微信的apple-app-site-association:
https://help.wechat.com/apple-app-site-association

也可以参考这个
https://app.foundersc.com/.well-known/apple-app-site-association

在Safari浏览器内输入:https://xdf.fzzqft.com/redirectApp/xx 查看是否可以调起App

原理分析

准确来说,iOS系统是在安装app应用的过程中向服务器发起请求,如果获得数据则会导入系统
系统会优先请求:https://{host}/.well-known/apple-app-site-association
如果第1步没请求成功,才会请求:https://{host}/apple-app-site-association

lxy:在xcode配置的applinks:xdf.fzzqft.com可以帮助找到文件,并进行下载,文件拿到后将数据写入系统,别的app就可以调起当前的app。

lxy:微信SDK,需要在微信开放平台填写app的universal link,在sdk初始化的时候universal link也需要作为参数传入,只有拿到universal link微信才能调起我们的app.在我们的APP调起微信的时候会将universal link作为参数传给微信,微信拿到之后才能调起我们的app.

img

微信SDK集成

微信SDK的分享,调起小程序,现在使用的是Universal links的方式,所以在使用微信SDK提供的功能之前,需要完成上面提到的各项配置
关于微信SDK的集成和初始化,微信官方有详细的文档说明,并根据SDK提供的接口可以进行自检

在集成时遇到始终无法自检通过且无法正常调起微信小程序,原因是缺少了下面的配置

img

如何通过UniversalLinks打开app

在另外一个APP中调用

- (IBAction)callDF:(id)sender {
    // Objective-C 代码,用于跳转到目标 App 的 Universal Link
    NSURL *universalLinkURL = [NSURL URLWithString:@"https://xdf.fzzqft.com/redirectApp/abc?key=value"];
    NSDictionary *option = @{};//打开相关的配置项
    // 判断系统是否能够处理这个 URL
    if ([[UIApplication sharedApplication] canOpenURL:universalLinkURL]) {
        [[UIApplication sharedApplication] openURL:universalLinkURL options:option completionHandler:^(BOOL success) {
            if (success) {
                NSLog(@"成功跳转到目标 App");
            } else {
                NSLog(@"跳转失败");
            }
        }];
    } else {
        // 无法打开 Universal Link,可能目标 App 未安装
        NSLog(@"无法跳转,目标 App 可能未安装");
    }
}

当app被调起时会来到下面的回调方法,这个方法的作用有以下几个:
Universal Links: 当用户通过点击一个支持 Universal Links 的 URL 来打开应用时,这个方法会被调用。
Handoff: 用于在不同的 Apple 设备之间传递任务或活动。当用户在一个设备上执行某个操作时,另一个设备(比如 iPhone 和 iPad)能够继续相应的任务。
SiriKit: 当通过 Siri 触发了应用相关的操作时。
Spotlight 搜索: 当用户通过 Spotlight 搜索打开你的应用时,也会触发该方法。

- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler {

    // 检查是否为网页 URL 类型的活动:Universal Links打开
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
        NSURL *incomingURL = userActivity.webpageURL;
        
        // 处理 URL,比如根据 URL 执行页面导航
        if ([incomingURL.host isEqualToString:@"example.com"]) {
            NSLog(@"Opened with Universal Link: %@", incomingURL.absoluteString);
            
            // 执行相应的导航逻辑
            // 比如将 URL 传递给一个特定的 ViewController
            
            return YES; // 表示应用成功处理了该活动
        }
    }
    return NO; // 表示应用无法处理该活动
}

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.