iOS 14后H5页面Universal Links跳转App失效的原因是什么?

是不是ios14以后不支持这样配置了?image.png

通过h5页面通过Universal Links跳转到app,一直没用

阅读 2.8k
avatarAI BotBETA

iOS 14 之后 H5 页面通过 Universal Links 跳转到 App 失效可能有多种原因。通常,Universal Links 在 iOS 上是受到支持的,并且跨多个 iOS 版本都能正常工作。但是,当跳转失效时,可能是由于以下一些常见原因:

  1. 配置问题

    • 确保你的 apple-app-site-association 文件配置正确,并且可以通过 HTTPS 访问。
    • 文件应放置在服务器根目录或 .well-known/apple-app-site-association 路径下。
    • 文件内容应正确包含应用的 bundleIDpathsappIDs(如果有多个应用ID)等信息。
  2. URL 格式问题

    • 确保你尝试打开的 URL 符合你在 apple-app-site-association 文件中定义的路径模式。
    • 如果 URL 包含查询参数或片段,确保这些也符合你的配置。
  3. 缓存问题

    • Universal Links 的行为可能会受到 Safari 缓存的影响。你可以尝试清除 Safari 的浏览数据和网站数据,或者在不同的浏览器或设备上测试。
    • 有时,用户可能需要手动在设备设置中打开 Universal Links 的支持(尽管这通常不是必需的)。
  4. iOS 系统问题

    • 确保你的设备已经更新到最新的 iOS 版本。
    • 在某些情况下,iOS 的更新可能会更改 Universal Links 的处理方式。
  5. 应用状态

    • 如果应用已经安装但处于未启动状态,Universal Links 应该能够正常工作。但是,如果应用已经打开并且在前台运行,Universal Links 可能不会触发应用的打开,而是直接跳转到应用内的某个页面(这取决于你的应用如何处理 Universal Links)。
  6. Xcode 和开发者工具

    • 确保你的 Xcode 和其他开发者工具(如 Apple 的开发者网站和证书管理工具)都已更新到最新版本。
    • 有时,Xcode 的更新可能会修复与 Universal Links 相关的问题。
  7. 网络问题

    • 确保你的设备能够成功访问 apple-app-site-association 文件所在的服务器。
    • 如果服务器出现问题(如证书过期、服务器宕机等),Universal Links 可能无法正常工作。
  8. 调试和日志

    • 使用 Xcode 的 Device Logs 或 Console 应用来检查与 Universal Links 相关的日志信息。这可能会提供有关问题的更多详细信息。
  9. 第三方库或插件

    • 如果你在应用中使用了第三方库或插件来处理 Universal Links,请确保它们与你的 iOS 版本和 Xcode 版本兼容。
  10. 其他考虑因素

    • 检查是否有其他设置或配置可能影响到 Universal Links 的行为(如设备的地区设置、网络设置等)。
    • 尝试在不同的设备和网络环境下进行测试,以排除特定环境导致的问题。

注意:iOS 14 本身并没有移除或更改对 Universal Links 的支持。因此,如果 Universal Links 在 iOS 14 上失效,很可能是由于上述某种原因导致的。

2 个回答
  1. 这个apple-app-site-association json文件一般要放在服务区的根目录下;
    例如:https://yourdomain.com/apple-app-site-association ; 并且要在浏览器中输入这个地址确保能够访问到
  2. 上面的: "appIDs": ["TEAMID.com.yourcompany.yourapp"] 中TEAMID是 是你的 Apple 开发者账号的团队ID,在开发者网站可以看到,com.yourcompany.yourapp 是App的Bundle Identifier
  3. 需要在 Xcode 项目中进行一些配置

    • 点击 Signing & Capabilities 标签。
    • 点击 + Capability 按钮,然后选择 Associated Domains。
    • 在 Domains 列表中添加你的域名,格式为 applinks:yourdomain.com。
  4. 还需要在ios项目的App Delegate中进行一些配置,这些配置的作用主要是打开特定的界面
    这是Swift版本:

      import UIKit
    
    @UIApplicationMain
    class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
            if let url = userActivity.webpageURL {
                // 在这里处理你的 URL
                handleUniversalLink(url: url)
            }
        }
        return true
    }
    
    func handleUniversalLink(url: URL) {
        // 在这里处理 URL,例如导航到应用的特定页面
        print("Received Universal Link: \(url)")
    }
    }

    这是OC代码:

    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    @property (strong, nonatomic) UIWindow *window;
    @end
    @implementation AppDelegate
    - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
        if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
            NSURL *url = userActivity.webpageURL;
            if (url) {
                [self handleUniversalLink:url];
            }
        }
        return YES;
    }
    
    - (void)handleUniversalLink:(NSURL *)url {
        // 在这里处理 URL,例如导航到应用的特定页面
        NSLog(@"Received Universal Link: %@", url);
    }
    
    @end

apple-app-site-association别放到oss类型这种储存器,解析有问题。

配置可以加个路径。然后访问https://xxxx/testApp即可

{
   "applinks": {
   "apps": [],
   "details": [
           {
            "appID": "xxxxx",
            "paths": ["/testApp/*"]
           }
        ]
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题