所以我按照教程https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9并使用与提供的值完全相同的值 .
Apple协会文件也已准备好在链接目录中:WEB_PAGE:PORT_NUMBER / apple-app-site-association
一切似乎都在这方面设置 .
我添加了权利,更新了配置文件以及所有设置 .
当我在我的设备上运行应用程序并打开链接http://WEB_PAGE:PORT_NUMBER时,这始终会打开Safari .
我甚至在以下方法中有断点:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler
但齐尔奇 .
有没有人完善这个?有什么我错过了吗?
28 回答
结果两天后,我发现这些链接(来自分支机构)
只有在归档(也是Ad-hoc)应用程序并将其安装到手机后才能工作 .
我可以使用日历应用程序在iOS模拟器中测试Universal Links .
我刚刚创建了一个事件,并添加了我想在事件中测试的URL
URL
字段 . 然后,在查看创建的活动时,您只需点按URL链接即可打开您的应用 .有一些可能的问题 .
尝试将您的域名粘贴到此链接验证程序中,并确保没有问题:https://limitless-sierra-4673.herokuapp.com/(贷记为ShortStuffSushi - 请参阅repo)
iOS如果您没有隐藏在操作系统日志中而不是应用程序日志中,则会在系统日志中记录错误消息 . 错误消息看起来像
Sep 21 14:27:01 Derricks-iPhone swcd[2044] <Notice>: 2015-09-21 02:27:01.878907 PM [SWC] ### Rejecting URL 'https://examplecustomdomain.com/apple-app-site-association' for auth method 'NSURLAuthenticationMethodServerTrust': -6754/0xFFFFE59E kAuthenticationErr
. 从使用CloudFlare for TLS here的here快速(不完整)说明中提取错误消息 .在我的个人测试中,点击/输入Safari中的链接从未直接打开过应用程序 . 从其他应用程序(iMessage,Mail,Slack等)单击已经有效 . 其他人报告说,点击Google搜索结果中的链接已直接打开了该应用 .
请注意,如果通用链接成功打开您的应用,然后您点击进入Safari(通过点击应用中导航栏右上角的网站),然后 iOS stops opening the app when you visit that URL . 然后在Safari中,您可以向下拉以在"Open"页面顶部显示 Banner . 我浪费了很多时间在这上面 . 请注意,根据您在apple-app-site-assocation文件中指定的路径,点击进入网站=>禁用UL似乎是 path specific . 因此,如果您有单独的路线,
yoursite.com/a/*
和yoursite.com/b/*
,如果您单击yoursite.com/a/*
并直接打开您的应用程序,则可以在应用程序的右上角选择单击以进入yoursite.com/a/*
. 如果您这样做,后续访问yoursite.com/a/*
将在浏览器中打开,而不是应用程序 . 但是,yoursite.com/b/*
应该不受影响,仍然可以直接打开您的应用 .如果你发现问题是什么,请告诉我 . 我个人非常好奇Universal Links如何工作以及存在哪些边缘情况 . 祝好运 .
有很多方法可能会出错 . 两点给我带来麻烦:
在Xcode中,当您添加Associated Domains权利时,每个条目都需要以
applinks:
开头,然后是您的域名 . 例如 .applinks:www.apple.com
.虽然Xcode为我创建了一个权利文件,但它没有包含在我的构建中:我必须手动点击该框 .
是的,在这样做之后,没有必要签署
apple-app-site-association
文件:它只是纯文本,并且它可以正常工作,但是如果你支持iOS 8,它仍然需要签名 . )documentation for making the association file for Universal Links中显然存在错误 .
在哪里说:
应该说
对于大多数应用程序,似乎团队ID和应用程序前缀相同,但如果您的应用程序已在商店中存在多年,则这些值可能会有所不同 .
要查找此值,请在https://developer.apple.com上打开成员中心,然后查看"Certificates, Identifiers & Profiles",在"Identifiers"下的表中单击"Identifiers",然后单击"App IDs" . 找到您的应用程序,并使用前缀值和Bundle ID为关联文件创建AppID .
要在服务器端验证
apple-app-site-association
,您可以使用Apple的官方验证器 .https://search.developer.apple.com/appsearch-validation-tool/
St.derrick的Answer内容丰富 .
但是为了再次启用通用链接在应用程序而不是safari中打开,我们需要执行以下操作 .
我意识到对我来说问题是链接到根目录a(例如
http://example.com/
)没有打开我的应用程序但是如果我添加了一个路径(例如http://example.com/mypath
)它就有用了 . 将"/"
添加到路径列表中:正如slutsker在this Apple Developer Forums主题中所回答的那样 .
快速检查您是否已正确实施Universal Link的步骤 .
点按并按住您希望启动该应用的链接 . 您应该在上下文菜单中看到“在[您的应用名称]中打开” .
打开Notes应用程序,键入您的链接期待打开应用程序 . 点按“完成” . 链接将变为黄色,点击链接应打开您的应用程序,而不是Safari .
如果链接http://yourDomain.com未启动该应用,请尝试http://yourDomain.com/yourFolder/
在Safari中,如果上下文菜单在Safari中显示“在[您的应用名称]中打开”,但点击该链接会在safari中打开链接而不是启动该应用,
一个 . 尝试拉下点击链接时打开的Safari页面,就像你“刷新”一样 . 应该会出现一个可以打开您的应用的 Banner . 点击 Banner 打开应用程序,按主页按钮关闭应用程序,返回safari并再次点击链接尝试启动应用程序 . 这一次,应用程序应该启动,因为点击 Banner 应该保存首选项以打开应用程序中的链接 .
湾如果在步骤a . 之后仍无法启动应用程序,请尝试将链接发送到gmail等网络邮件,然后在Safari中打开webmail网站并尝试单击该链接 . 如果这样做,您可能一直在尝试从与链接相同的域中启动应用程序 . 从我所看到的, launching the app from the same domain mostly fails . 当链接进入用户所在的同一域时,可能safari不会关心目标URL是否为通用链接 . 因此,尝试从其他域启动该应用程序 .
为帮助调试此问题,请在安装应用程序时在设备的控制台输出中搜索“swcd”,以查看注册通用链接是否有效 .
使用实际设备,而不是模拟器 .
从您的设备中删除该应用 .
将设备连接到计算机,然后在xcode中查看设备的控制台输出 . (窗口 - >设备 - > [您的设备] - >查看设备日志) . 保持此窗口打开 .
安装您的应用并让它启动 .
将控制台输出过滤为"swcd" . 如果它_1123368_我会看到别的东西 . 如果你没有看到任何东西,那么你搞砸了一些基本的东西,比如添加Associated Domains权利 .
在集成通用链接后增加项目版本或内部版本号也非常重要 . 即使您删除/重新安装,iOS也不会获取链接,除非您碰到版本 .
如果将链接粘贴到浏览器URL字段中,则
使用用户驱动的
<a href="...">
元素Universal Links work 单击 across domains . 示例:如果google.com上有一个指向bnc.lt的通用链接,它将打开该应用 .
Universal Links将 not work 与用户驱动的
<a href="...">
元素单击 on the same domain . 示例:如果google.com上的通用链接指向google.com上的其他通用链接,则无法打开该应用 .无法通过Javascript(在window.onload中或通过
<a>
元素上的.click()调用)触发通用链接,除非它是用户操作的一部分 .来源:https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links
第三个子弹花了我一天的时间来弄明白 .
这里的人们正在寻找其他解决方案,我们整理了整个调试Universal Links的步骤,因为我们已经看到很多问题突然出现,引起了很多麻烦 .
看看这个:
Universal Links Debugging Guide
如果您只是想设置新的环球链接,本指南非常有帮助:
iOS Deep Linking Setup Guide
希望他们有所帮助!
只是想我会添加一些我发现的东西,以防更多人在将来遇到与我相同的问题 . 这些主要与身份验证错误有关 .
尽管apple没有明确说明,但即使签名,
apple-app-site-association
文件也必须通过https提供 . 用于https的证书也必须由apple信任 . 因此,虽然在设置 - >常规 - >配置文件中添加到设备的证书将允许Safari中的https,但它不允许通用链接工作 .在设备日志中,如果设备和服务器之间出现身份验证错误,则会打印一个值,如
"TrustResultValue" : 4
.TrustResultValue
为5表示证书用于错误的域(例如,test.com从www.test.com提供) .TrustResultValue
为4表示此用途不信任证书 .调试here可能有一些有用的步骤 . "Testing access to apple-app-site-association"部分是如何确保设备获取
apple-app-site-association
文件的分步指南 . 步骤归结为:卸载应用程序 . 这是必要的,因为文件是在安装时下载的 .
停止服务器正确提供
apple-app-site-association
.在xcode中,打开Window - > Devices,然后选择你的设备 .
单击窗口底部的三角形打开设备日志 .
通过单击垃圾桶清除日志以清除可能相关的所有先前日志 .
单击播放按钮,使用xcode重新安装应用程序 .
应用程序启动后,如果设备正确请求文件,则设备日志应包含可通过搜索“apple-app-site-association”找到的错误 .
如果正确提供了
apple-app-site-association
文件(省略了第2步),那么应该没有错误 . 如果这是问题,则可以显示验证错误 .最常见的原因是当用户点击右上角时,告诉iOS将来不要打开应用程序(在本例中为Uber) .
要修复,请下拉以显示智能 Banner 并点按“打开”:
这将随后“记住”打开应用程序 .
对于需要轻松测试开放(通用)链接的任何人,您还可以使用以下命令从终端打开模拟器中的链接:
xcrun simctl openurl booted yourapp_or_http://yourlink
例如:
xcrun simctl openurl booted https://www.google.com
我已经设法使它工作,但它花了相当多的时间和斗争 . 请注意,s23394
apple-app-site-association
file (签名是可选的!)点击Safari中的链接将无法打开您的应用程序(这让我很头疼) .花了我一天的时间来解决这个问题 . 我遇到的问题是没有在XCode中下载更新的配置文件(之后我也重新启动了XCode) .
来自App Search Programming Guide: Support Universal Links
转到developer.apple.com并编辑您的一个分发配置文件 . 在编辑页面中,您可以打开一个 pop up for App IDs ,它将显示您的应用名称列表,并在应用程序名称后面的()圆括号中显示 reveals all your real App IDs . 某些应用可能会将您的团队ID作为前缀,但有些则不会 . 确保使用您在()内的弹出菜单中看到的内容,并将其放入apple-app-site-association详细信息appID字段中 . 我的应用程序及其通用链接确实存在这个问题 .
我们已将 apple-app-site-association 文件添加到此位置:
在iOS 9上它运行良好,但在iOS 10上它没有用 .
似乎问题是 .well-known 路径:
由于https://example.com/.well-known/apple-app-site-association路径重定向到https://example.com
在我看来,如果以某种方式.well-known路径无法正常工作,它会破坏通用链接 .
还没有真正看到完全相同的问题/解决方案组合让它为我工作所以不妨添加我的同意有人有同样的问题!
对于我的应用程序,我使用自定义URL方案(在
APP_TARGET > Info > URL Types
中设置)并将URL方案从此处设置到Firebase控制台以匹配但仍然无法正常工作 .我的问题实际上是两个问题:
Watch out if checking Automatically Manage Signing
如果您像我一样检查Xcode的"Automatically manage signing"设置,因为我只是想制作一个快速演示应用程序,您需要确保使用的TeamID与Firebase控制台中的TeamID相匹配 . 我最初去了我的Apple开发者帐户并从我的会员页面复制了团队ID,但后来发现Xcode使用的实际ID是不同的 . (你可以在_1423410中找到这个...对我来说它看起来像
iPhone Developer: My Name (TEAM_ID)
) .Prefix your TeamID to your Bundle Identifier in your URL Types
在我的Firebase控制台和Xcode中确保这些匹配后,我的下一个问题是我的URL方案的标识符 . 这里通常会使用您的捆绑包标识符,但Firebase实际上会在您的Firebase控制台中添加您的团队ID前缀,因此我必须在Xcode的URL类型部分中将其作为标识符的前缀 .
在这两个修复并重新下载
GoogleService-Info.plist
文件后,我没有问题打开我的动态链接 .我的问题原来是
apple-app-site-association
文件 . 根据Apple的文档,只需要applinks参数 . 我添加了activitycontinuation
参数并且它有效 .对我来说,我的错误是我们的网站将www.domain.com重定向到domain.com,因此所有www.domain.com/*都会失败 . 希望有所帮助 .
经过两天的绝望,我想我终于解决了 . 这是我的解决方案:
似乎较旧的应用程序使用与新应用程序不同的应用程序前缀 . 较新的应用程序仅为此目的使用团队ID . 如果应用前缀和团队ID不相同,则您似乎需要在Apple应用网站关联文件中指定活动延续字段:
我在地狱骑行期间遇到的另一件事是删除应用程序并重新启动设备似乎是强制刷新此文件的唯一方法 .
对于找到此页面的未来读者...
我有类似的情况 . 但是,在我的情况下,iOS10正在使用AOK,无论我做了什么(颠倒构建号码,删除/重新安装等),iOS9似乎拒绝工作 .
我是从iOS10来的,需要支持iOS9 . 当时,此处的文档 - https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html - 明确指出该文件可能位于Web服务器的根目录(例如
/apple-app-site-association
)或.well-已知文件夹(例如/.well-known/apple-app-site-association
) . 因为我也支持Android,它也使用.well-known文件夹作为类似的文件,我决定将两者放在那里 .对于iOS10上的全新安装,它明确请求根文件,失败,然后请求.well已知文件,并成功 .
对于iOS9,它明确要求根文件,失败,并且不做任何其他事情 .
解决方案:如果您支持iOS9,请将文件放在
/apple-app-site-association
.在我的情况下,我的错误是将查询参数放在路径中:
当我从路径中删除'?target = confirm&*'时,它开始工作
就我而言,AASA文件的请求位于:https://example.com/apple-app-site-association
被重定向到:https://www.example.com/apple-app-site-association
踢球者是 - this works fine on iOS 11, but fails on iOS 9.3.5. 去图 .
Solution:
apple-app-site-association
文件不得落后于iOS 9的302或301重定向 . (公平地说,这在UL troubleshooting page上有说明 . )