iOS9:通用链接不起作用

所以我按照教程https://blog.branch.io/how-to-setup-universal-links-to-deep-link-on-apple-ios-9准确地使用与提供的值相同的值。

苹果协会文件也准备在链接目录中:WEB_PAGE:PORT_NUMBER / apple-app-site-association

似乎一切都设置在这一边。

我已经添加了权利,更新了configuration文件以及所有设置。

当我在我的设备上运行应用程序,并打开链接http:// WEB_PAGE:PORT_NUMBER时 ,这总是打开Safari。

我甚至有以下方法的断点:

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

但是zilch。

有没有人完善这个? 有什么我错过了吗?

有几个可能的问题。

  1. 尝试将您的域名粘贴到此链接validation器中,并确保没有问题: https ://limitless-sierra-4673.herokuapp.com/(信用于ShortStuffSushi – 请参阅回购 )

  2. 如果在权利中指定的域上没有正确设置TLS,则iOS会在系统日志中logging一条错误消息。 它被埋在OS日志中,而不是应用程序日志。 这个错误信息看起来像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的快速(不完整)说明。

  3. 在我的个人testing中,单击/在Safari中input链接从未曾经直接打开应用程序。 从其他应用程序(iMessage,Mail,Slack等)点击已经工作。 其他人报告说,谷歌search结果中的点击链接直接打开了应用程序。

  4. 请注意,如果Universal Link成功打开您的应用,然后点击Safari浏览器(通过点击应用中导航栏右上angular的网站),则iOS在您访问该URL时将停止打开该应用 。 然后在Safari中,您可以通过“打开”button在页面顶部显示横幅。 我浪费了很多时间 请注意,点击该站点=>禁用UL似乎是path特定的 ,基于您在apple-app-site-association文件中指定的path。 所以,如果您有单独的路线,请访问yoursite.com/a/*yoursite.com/b/* ,如果您单击yoursite.com/a/*并直接打开您的应用程序,则您可以在右上angular点击进入yoursite.com/a/* 。 如果你这样做,后续访问yoursite.com/a/*将在浏览器中打开,而不是应用程序。 但是, yoursite.com/b/*应该不受影响,并且仍然直接打开您的应用程序。

如果你发现问题是什么,请告诉我。 我个人非常好奇Universal Links如何工作和存在哪些边缘案例。 祝你好运。

有很多方法可能会出错。 两点引起了我的麻烦:

  • 在Xcode中,当您添加Associated Domains权利时,每个条目需要以applinks:开始applinks:然后是您的域名。 例如applinks:www.apple.com

  • 虽然Xcode为我创build了一个授权文件,但它并没有包含在我的内部:我不得不手动点击那个文件夹。

是的,这样做后,没有必要签署apple-app-site-association文件:它只是纯文本,只要通过HTTPS提供,它就可以工作。 (但是,如果您支持iOS 8,您仍然需要签名。)

通用链接的关联文件的文档中显然存在错误。

它说:

appID键的值是应用程序的团队ID和软件包ID

应该说

appID键的值是应用程序的前缀和软件包ID

对于大多数应用程序来说,团队ID和应用程序前缀似乎是相同的,但是如果您的应用程序已在商店中使用多年,这些值可能会有所不同。

要find该值,请打开https://developer.apple.com上的会员中心,然后查看“证书,标识符和configuration文件”,单击“标识符”下表中的“标识符”,然后单击“应用程序ID”。; find您的应用程序,并使用前缀值和Bundle ID在那里创build关联文件的AppID。

要validation服务器端的apple-app-site-association ,可以使用Apple的官方validation器。

https://search.developer.apple.com/appsearch-validation-tool/

St.derrick的答案是信息。

但要启用通用链接来打开应用程序,而不是Safari浏览器,我们需要做以下事情。

  • 长按邮件或iMessage中的通用链接,然后您将看到是否在Safari或App中打开的选项。

我意识到,对我来说问题是,根目录的链接(如http://example.com/ )没有打开我的应用程序,但如果我添加了一个path(例如http://example.com/mypath ) 有效。 向path列表添加"/"可以解决这个问题:

 { "applinks": { "apps": [], "details": [ { "appID": "TEAM_ID.BundleIdentifier", "paths": [ "*", "/" ] } ] } } 

正如在这个苹果开发者论坛主线slutsker回答。

快速检查您是否已正确实施Universal Link。

  • 点击并按住您希望启动应用程序的链接。 您应该在上下文菜单中看到“在[您的应用程序名称]中打开”。

  • 打开Notes应用程序,input您希望打开应用程序的链接。 点按完成。 该链接将变成黄色,点击链接应打开你的应用程序,而不是Safari。

  • 如果链接http://yourDomain.com没有启动应用程序,请尝试http://yourDomain.com/yourFolder/

  • 在Safari中,如果上下文菜单在safari中显示“在[您的应用程序名称]中打开”,但点击该链接将打开safari中的链接而不是启动应用程序,

    一个。 尝试下拉链接被点击时打开的Safari浏览器页面,就像你“刷新”的方式。 应该出现一个横幅,可以打开你的应用程序。 点击横幅打开应用程序,按主页buttonclosures应用程序,回到Safari浏览器,并尝试通过再次点击链接启动应用程序。 这一次,应用程序应该启动,因为点击横幅应该已经保存了在应用程序中打开链接的偏好。

    湾 如果在步骤a之后应用程序仍然没有启动,请尝试将链接邮寄到诸如Gmail之类的networking邮件,然后在safari中打开Webmail站点,然后尝试单击该链接。 如果这样做,你可能一直在尝试从链接的相同的域启动应用程序。 从我所看到的, 从同一个域启动应用程序大多失败 。 可能safari不会在意检查目标url是否为通用链接,当链接与用户所在的域相同时。 所以尝试从另一个域启动应用程序。

集成通用链接后,增加项目版本或版本号也是非常重要的。 即使您删除/重新安装,iOS也不会提取链接,除非您碰撞该版本。

为了帮助debugging此问题,请在安装应用程序时在设备的控制台输出中search“swcd”,以查看注册通用链接是否工作或失败。

  1. 使用一个实际的设备,而不是模拟器。
  2. 从您的设备上删除应用程序。
  3. 将设备连接到电脑,并在xcode中查看设备的控制台输出。 (窗口 – >设备 – > [您的设备] – >查看设备日志)。 保持这个窗口打开。
  4. 安装你的应用程序,让它启动。
  5. 将控制台输出过滤为“swcd”。 如果成功,您将看到类似以下屏幕截图的内容。 如果失败,你会看到别的东西。 如果你没有看到任何东西,那么你就搞砸了一些基本的东西,比如添加Associated Domains权利。

Applink成功添加

在这里,Incase人正在寻找其他的解决scheme,我们整理了Universal Links的一整步,因为我们已经看到了很多问题,造成了很多麻烦。

一探究竟:

通用链接debugging指南

调试指南预览

如果你只是想设置新的通用链接,这个指南是非常有用的:

iOS深层链接设置指南

希望他们有帮助!

只是以为我会添加一些我发现的事情,以防将来遇到同样的问题。 这些主要与authentication错误有关。

即使苹果没有明确说明,即使签名,也必须通过https提供apple-app-site-association文件。 用于https的证书也必须由苹果信任。 因此,当在设置 – >常规 – >configuration文件中添加到设备的证书将允许https在safari中时,它将不允许通用链接工作。

在设备日志中,当设备和服务器之间发生authentication错误时,将会有一个值为"TrustResultValue" : 4的值"TrustResultValue" : 4 。 5的TrustResultValue表示证书是针对错误的域(例如,来自www.test.com的test.com)。 4的TrustResultValue表示证书不受此用途的信任。

这里可能有一些有用的debugging步骤。 “testing访问苹果应用程序站点关联”部分是一步一步的指导,如何确保设备获取apple-app-site-association文件。 步骤归结为:

  1. 卸载应用程序。 这是必要的,因为该文件是在安装时下载的。

  2. 停止服务器正确提供apple-app-site-association

  3. 在xcode中,打开窗口 – >设备,然后select您的设备。

  4. 通过单击窗口底部的三angular形来打开设备日志。

  5. 通过单击垃圾桶来清除日志,以清除以前可能相关的日志。

  6. 点击播放button,用xcode重新安装应用程序。

  7. 应用程序启动后,如果设备正确请求文件,则设备日志应包含可通过search“apple-app-site-association”find的错误。

如果apple-app-site-association文件得到正确的服务(步骤2被省略),那么应该没有错误。 如果这是问题,则可能会显示validation错误。

最常见的原因是用户点击右上angular,从而告诉iOS未来不打开应用程序(在这里是Uber)。

要修复,请拉下以显示智能横幅,然后点击打开:

在Safari中拉下,再次打开

这将随后“记住”打开应用程序。

  • 如果将链接粘贴到浏览器URL字段中,Universal Links将不起作用。

  • 通用链接与用户驱动的<a href="...">元素点击跨域 。 例如:如果google.com上有一个指向bnc.lt的通用链接,它将打开该应用程序。

  • 通用链接不会与用户驱动的<a href="...">元素点击相同的域名 。 例如:如果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

第三个子弹花了我大约一天的时间来弄清楚。

花了我近一天的时间来解决这个问题。 我遇到的问题是没有在XCode中下载更新的configuration文件(之后我也重新启动了XCode)。

(首选项>帐户>查看详情>全部下载)

您可以在模拟器中testing通用链接

从应用程序search编程指南:支持通用链接

我已经设法使其工作,但花了相当一段时间和斗争。 请注意, 除非您在Safari中的链接上点击apple-app-site-association 文件 (签名是可选的!),否则不会打开您的应用程序(这已经引起了我很多头痛)。

转到developer.apple.com并编辑您的一个分发configuration文件。 在编辑页面中,您可以打开一个App IDpopup窗口,显示您的应用程序名称列表,并在应用程序名称后面的()圆括号中显示所有真实的 App ID 。 有些应用程序可能会将您的团队ID作为前缀,但有些则不会 。 确保使用()中popup菜单中的确切内容,并将其放入apple-app-site-association的详细信息appID字段中。 我恰好有一个应用程序及其通用链接的这个问题。

我们已将apple-app-site-association文件添加到此位置:

 https://example.com/apple-app-site-association 

在iOS 9上,它运行良好,但在iOS 10上没有工作。

看起来这个问题出现在一个众所周知的道路上:

 https://example.com/.well-known/apple-app-site-association 

由于https://example.com/.well-known/apple-app-site-associationpathredirect到https://example.com

 <Notice>: Allowing redirect 'https://example.com/.well-known/apple-app-site-association' -> 'https://example.com/' <Notice>: ### Rejecting AASA file size 154466 for URL https://example.com/.well-known/apple-app-site-association 

在我看来,如果知道的path不能正常工作,它会破坏通用链接。

还没有真正看到完全相同的问题/解决scheme组合,让它为我工作,所以不妨join我的事情有人有同样的问题!

对于我的应用程序,我使用了一个自定义的URLscheme(在APP_TARGET > Info > URL Types设置),并将URLscheme从这里设置到Firebase控制台中以匹配,但仍然无法工作。

我的问题实际上是两个问题:

注意是否选中“自动pipe理签名”

如果您正在像我一样检查Xcode的“自动pipe理签名”设置,因为我只是试图制作一个快速演示应用程序,您将需要确保使用的TeamID与您的Firebase控制台中的TeamID相匹配。 我原本是去我的苹果开发者账户,并从我的会员页面复制团队ID,但后来看到Xcode使用的实际ID是不同的。 (你可以在APP_TARGET > General > Signing > Signing Certificate.find它APP_TARGET > General > Signing > Signing Certificate.对我来说,它看起来像iPhone Developer: My Name (TEAM_ID) )。

在URLtypes中将您的TeamID前缀添加到您的Bundle标识符中

在我的Firebase控制台和Xcode中确保匹配后,我的下一个问题就是我的URLscheme的标识符。 在这里使用你的包标识符是很典型的,但是Firebase实际上是用你在Firebase控制台中给出的团队ID作为前缀,所以我必须在Xcode的URLtypes部分标识前缀。

经过这两个修复,并重新下载GoogleService-Info.plist文件,我没有问题打开我的dynamic链接。

对我来说问题竟然是apple-app-site-association文件。 根据苹果的文档,只有applinks参数是必需的。 我添加了activitycontinuation参数,它工作。

 { "activitycontinuation": { "apps": [ "9JA89QQLNQ.com.apple.wwdc" ] }, "applinks": { "apps": [], "details": [{ "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*" ] }] } } 

对我而言,我的错误是我们的网站正在将www.domain.comredirect到domain.com,所以www.domain.com/*将因此而失败。 希望有所帮助。

我能够使用日历应用程序在iOS模拟器中testingUniversal Links。

我刚刚创build了一个事件,并在事件的URL字段中添加了我想testing的URL 。 然后,在查看创build的事件时,只需点击URL链接,即可打开您的应用程序。

对于未来的读者,find这个网页…

我也有类似的情况。 然而,在我的情况下,iOS10正在工作AOK,无论我做了什么(颠簸编号,删除/重新安装等),iOS9似乎拒绝工作。

我是从iOS10来的,需要支持iOS9。 当时,这里的文档 – https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html – 明确指出,该文件可能被放置在networking服务器的根目录(例如/apple-app-site-association )或/.well-known/apple-app-site-association -known文件夹(例如/.well-known/apple-app-site-association )。 因为我也支持Android,也使用.well-known文件夹来处理类似的文件,所以我决定把它们放在那里。

对于iOS10上的全新安装,它清楚地要求根文件,失败,然后请求.well-known文件,并成功。

对于iOS9,它明确要求根文件,失败,并没有别的。

解决scheme:如果你支持iOS9,把文件放在/apple-app-site-association

两天后,对我来说,这些链接(从分支)

applinks:xxxx.app.link

只有在归档(也是Ad-hoc)应用程序并将其安装到手机之后才能工作。