通用链接 iOS

Universal Links iOS

我在让 Universal links 在我的应用程序上运行时遇到了一些问题。这是我已经做过的事情。

-- 创建了我的 apple-app-site-association 文件。这是我的文件

{

    "applinks": {
                "apps": [],
                "details": [{
                    "appID": "XXXXXXXXXX.com.companyName.app",
                    "paths": ["/view/*", "/class/*"]
                }]
            }
}

我没有签署我的文件,我将我的项目部署目标设置为 iOS 9.2(这样我就不必签署这个文件)。

-- 在我的项目功能中添加了关联域

applinks:companyName.com
applinks:www.companyName.com

-- 我的开发者门户中也启用了关联域

-- 更新了配置文件并使用了新的

-- 为构建添加了授权。

-- 覆盖了这个委托方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler

该文件可从我的 HTTPS 服务器获得,我检查了此苹果验证器的通用 links 状态。 https://search.developer.apple.com/appsearch-validation-tool/ 验证者正在验证这个。但是当我点击 iMessage 中的 link 并且 link 类似于 companyName.com/view/7375 时,它将在 safari 中打开并且我的应用程序没有收到任何回电。

知道我错过了什么吗

可能 OS 现在考虑在 "override" 模式下处理您的 URL -- 为什么它会进入 Safari。

当您的应用解析通用 Link 时,您会在屏幕的右上角看到类似 "companyName.com -->" 的内容。如果你点击它,这就是 OS 的方式 "overriding" Universal Link 的处理方式,并在那时和永远在 Safari 中打开它。

尝试返回“消息”应用并长按 link。一两秒后,您应该会看到一个操作 sheet 出现,它为您提供 "Open in Safari" 和 "Open in 'Your App Name'" 等选项。 Select "open in your name" 选项。那应该 "reset" OS 视图如何处理你的通用 Links,现在将它们引导回你的应用程序。

您还必须实现以下 AppDelegate 函数。

- (BOOL)application:(UIApplication *)application willContinueUserActivityWithType:(NSString *)userActivityType

我遇到了同样的问题。不幸的是,Apple 对此没有很好的记录。

当您支持通用 links 时,iOS 9 位用户可以点击 link 访问您的网站并无缝重定向到您安装的应用程序,而无需通过 Safari。如果您的应用程序未安装,点击 link 您的网站将在 Safari 中打开您的网站。

在这里,如何设置您自己的服务器,并在您的应用程序中处理相应的 link。

转到 Apple 开发者页面

在 developer.apple.com 注册您的应用程序。 在您的应用程序标识符上启用“关联域”。

在您的 Xcode 项目中启用“关联域” 一旦您像上一步一样在 developer.apple.com 中启用您的应用程序 ID 中的关联域,错误“将关联域功能添加到您的应用程序 ID”将消失。如果它没有消失,请退出并重新启动 xcode 几次,它会起作用。

添加正确的域授权并确保授权文件包含在构建中:Xcode 将自动完成。

然后使用终端创建 apple-app-site-association 文件

使用此命令创建 AASA(apple-app-site-association)文件。

  1. cd 桌面

  2. touch apple-app-site-association

然后打开AASP FILE写入这个json格式的数据

{
"applinks": {
    "apps": [ ],
    "details": [

        {
            "appID": "TeamID.BundleID2",
            "paths": [ "*" ]
        }
    ]
}
}

准备好 AASA 文件后,您现在可以托管 https://<>/.well-known/apple-app-site-association
将 apple-app-site-association 文件上传到您的 HTTPS Web 服务器。您可以将文件放在服务器的根目录或 .well-known 子目录中。

苹果应用程序网站协会 (AASA) 验证器 转到以下 link 并输入您的域名。它将检查 AASA 文件是否有效且可访问。 Link: https://branch.io/resources/aasa-validator/#resultsbox

完成后,将下面的代码添加到您的 Appdelgate

Swift4

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    print("Continue User Activity called: ")
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL!
        print(url.absoluteString)
        //handle url and open whatever page you want to open.
    }
    return true
}

Objective-c

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
        NSURL *url = userActivity.webpageURL;

        }

    return YES;
}

然后检查你的权利添加到应用程序目标,运行 它会重定向到你的 app.Make 确保 AASA 文件将像下面的屏幕一样验证然后它重定向到你的 application.If 任何东西想念它没有重定向到您的应用程序。

在您的服务器内部出现任何内容类型验证错误,然后您可以创建一个 .htaccess 文件并在其中编写此代码。

<Files "apple-app-site-association">
ForceType 'application/json'
</Files>

这个程序在我这边有效。我希望你这边也能正常工作。如果您喜欢阅读本文 post。