我在iOS中使用通用链接。它在Safari浏览器和消息中运行良好。
设置服务器
我有一台在线运行的服务器。为了安全地将我的iOS应用程序与服务器关联,Apple要求您提供名为apple-app-site-association的配置文件。这是一个JSON文件,描述了域和支持的路由。
apple-app-site-association文件需要通过HTTPS访问,无需任何重定向,https:// {domain} / apple-app-site-association。
该文件如下所示:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "**********.com.domain.appname”,
"paths": ["*"]
}
]
}
}
注意 - 我没有将.json附加到apple-app-site-association文件名。
并成功设置了iOS应用程序。
我的要求是,我分享了从我的应用程序到Facebook的链接。当用户点击Facebook上的链接时,应该在应用程序在手机上可用时打开应用程序,或者应该从浏览器打开应用程序。
现在我的问题是:
第1步:我分享了从我的应用程序到Facebook的链接。
第2步:我从Safari登录Facebook。当我点击链接时,它会成功打开我的应用程序。
第3步:如果我在Facebook应用程序中执行相同操作。它正在Facebook网页视图中打开。但我需要它来打开我的应用程序。
这是一个非常常见的问题:Facebook应用程序不支持应用程序中的Universal Linking。正如您所看到的,您每次都会在webview中结束。这是许多应用程序的问题,这些应用程序强制在强制网络浏览中打开Web内容。某些应用程序(例如Slack)确实提供了在Safari中打开Web内容而不是强制webview的设置。 Facebook应用程序不提供此选项。
我在这种情况下看到的最佳用户体验是在webview中显示您自己的网页。显示的网页上有一个通用链接,通过点击此链接,用户可以打开您的应用。
Branch通过向其合作伙伴提供“Deepviews”(请参阅:https://dev.branch.io/features/deepviews/overview/)来处理此额外网页的要求。你当然可以自己创造类似的东西。
它通过处理
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
print(url)
}
/// parser function
func parseFBAppLinks(from url: URL) -> String? {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return .none }
guard let urlString = components.queryItems?.first?.value else { return .none }
return urlString
}