Leg*_*las 97 xcode objective-c ios ios9 ios-universal-links
所以我也跟着教程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
Run Code Online (Sandbox Code Playgroud)
但齐尔奇.
有没有人完善这个?有什么我错过了吗?
st.*_*ick 176
有一些可能的问题.
尝试将您的域名粘贴到此链接验证器中,并确保没有问题:https://limitless-sierra-4673.herokuapp.com/(信用于ShortStuffSushi - 请参阅repo)
如果您没有在权利中指定的域上正确设置TLS,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的快速TLS(不完全)的说明这里.
在我的个人测试中,点击/输入Safari中的链接从未直接打开过应用程序.从其他应用程序(iMessage,Mail,Slack等)单击已经有效.其他人报告说,点击Google搜索结果中的链接已直接打开了该应用.
请注意,如果通用链接成功打开您的应用,然后您点击进入Safari(通过点击应用中导航栏右上角的网站),则iOS会在您访问该网址时停止打开该应用.然后在Safari中,您可以向下拉以在"打开"页面顶部显示横幅.我浪费了很多时间在这上面.请注意,根据您在apple-app-site-assocation文件中指定的路径,单击进入站点=>禁用UL似乎特定于路径.因此,如果您有单独的路线,yoursite.com/a/*
并且yoursite.com/b/*
,如果您单击yoursite.com/a/*
并直接打开您的应用程序,则可以在应用程序的右上角选择单击以进入yoursite.com/a/*
.如果你这样做,后续访问yoursite.com/a/*
将在浏览器中打开,而不是应用程序 但是,yoursite.com/b/*
应该不受影响,仍然可以直接打开您的应用.
如果你发现问题是什么,请告诉我.我个人非常好奇Universal Links如何工作以及存在哪些边缘情况.祝好运.
小智 61
有很多方法可能会出错.两点给我带来麻烦:
在Xcode中,当您添加Associated Domains权利时,每个条目都需要以applinks:
您的域名开头,然后是您的域名.例如applinks:www.apple.com
.
虽然Xcode为我创建了一个权利文件,但它没有包含在我的构建中:我必须手动点击该框.
是的,在这之后,没有必要签署apple-app-site-association
文件:它只是纯文本,只要它通过HTTPS提供,它就可以工作.(不过,如果你支持iOS 8,你仍然需要签名.)
小智 33
用于制作Universal Links的关联文件的文档中显然存在错误.
在哪里说:
appID键的值是应用程序的团队ID和包ID
应该说
appID键的值是应用程序的前缀和包ID
对于大多数应用程序,似乎团队ID和应用程序前缀相同,但如果您的应用程序已在商店中存在多年,则这些值可能会有所不同.
要查找此值,请在https://developer.apple.com上打开成员中心,然后查看"证书,标识符和配置文件",单击"标识符",然后单击"标识符"下的表中的"应用程序ID".找到您的应用程序,并使用前缀值和Bundle ID为关联文件创建AppID.
mpo*_*sot 23
为帮助调试此问题,请在安装应用程序时在设备的控制台输出中搜索"swcd",以查看注册通用链接是否有效.
Dev*_*evy 21
要apple-app-site-association
在服务器端验证,您可以使用Apple的官方验证器.
https://search.developer.apple.com/appsearch-validation-tool/
tid*_*eck 17
我意识到对我来说问题是链接到根目录a(例如.http://example.com/
)没有打开我的应用程序,但如果我添加了一个路径(例如.http://example.com/mypath
)它工作.添加"/"
到路径列表中的是:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "TEAM_ID.BundleIdentifier",
"paths": [ "*", "/" ]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
正如在回答slutsker 这个苹果开发者论坛线程.
Nik*_*hew 15
快速检查您是否已正确实施Universal Link的步骤.
点按并按住您希望启动该应用的链接.您应该在上下文菜单中看到"在[您的应用名称]中打开".
打开Notes应用程序,键入您希望打开应用程序的链接.点按"完成".链接将变为黄色,点击链接应打开您的应用程序,而不是Safari.
如果链接http://yourDomain.com未启动该应用,请尝试http://yourDomain.com/yourFolder/
在Safari中,如果上下文菜单在Safari中显示"在[您的应用名称]中打开",但点击该链接会在safari中打开链接而不是启动该应用,
一个.尝试拉下点击链接时打开的Safari页面,就像你"刷新"一样.应该会出现一个可以打开您的应用的横幅.点击横幅打开应用程序,按主页按钮关闭应用程序,返回safari并再次点击链接尝试启动应用程序.这一次,应用程序应该启动,因为点击横幅应该保存首选项以打开应用程序中的链接.
湾 如果在步骤a.之后仍无法启动应用程序,请尝试将链接发送到gmail等网络邮件,然后在Safari中打开webmail网站并尝试单击该链接.如果这样做,您可能一直在尝试从与链接相同的域中启动应用程序.从我所看到的,从同一个域启动应用程序大多失败.当链接进入用户所在的同一域时,可能safari不会关心目标URL是否为通用链接.因此,尝试从其他域启动该应用程序.
Kyl*_*ott 11
在集成通用链接后增加项目版本或内部版本号也非常重要.即使您删除/重新安装,iOS也不会获取链接,除非您碰到版本.
如果将链接粘贴到浏览器URL字段中,则Universal Links将无法使用.
通用连接工作与用户驱动的<a href="...">
元素点击跨域.示例:如果google.com上有一个指向bnc.lt的通用链接,它将打开该应用.
Universal Links 无法使用用户驱动的<a href="...">
元素单击同一域.示例:如果google.com上的通用链接指向google.com上的其他通用链接,则无法打开该应用.
无法通过Javascript(在window.onload中或通过<a>
元素上的.click()调用)触发Universal Links ,除非它是用户操作的一部分.
来源:https://dev.branch.io/getting-started/universal-app-links/support/ios/#appsbrowsers-that-support-universal-links
第三个子弹花了我一天的时间来弄明白.
这里的人们正在寻找其他解决方案,我们整理了整个调试Universal Links的步骤,因为我们已经看到很多问题突然出现,引起了很多麻烦.
看看这个:
如果您只是想设置新的环球链接,本指南非常有帮助:
希望他们有所帮助!
我们已将apple-app-site-association文件添加到此位置:
https://example.com/apple-app-site-association
Run Code Online (Sandbox Code Playgroud)
在 iOS 9 上它运行良好,但在 iOS 10 上它不起作用。
看来问题出在.well-known路径上:
https://example.com/.well-known/apple-app-site-association
Run Code Online (Sandbox Code Playgroud)
由于https://example.com/.well-known/apple-app-site-association路径重定向到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
Run Code Online (Sandbox Code Playgroud)
在我看来,如果不知何故 .well-known 路径不能正常工作,它会破坏通用链接。
对于 ios13,有一种新格式 - 请在此处查看https://developer.apple.com/documentation/safariservices/supporting_linked_domains_in_your_app?language=objc
我更新了我的文件,如下所示:
{
"applinks": {
"apps": [],
"details": [
{
"appIDs": ["1234.app.company.appname"],
"appID": "1234.app.company.appname",
"components": [
{
"/": "/login"
}
],
"paths": [ "/login" ]
}
]
},
"webcredentials": {
"apps": ["1234.app.company.appname"]
}
}
Run Code Online (Sandbox Code Playgroud)
有时我发现关联文件一切正常,但 iOS 决定始终在 Safari 中打开通用链接。为了测试应用程序是否识别应用程序链接,我将 URL 添加到“便笺”或“日历”条目,然后长按它以显示上下文菜单。如果显示“在 {YOUR APP} 中打开”,则链接有效,但 iOS 决定在 Safari 中打开它。点击“在 {YOUR APP} 中打开”将告诉 iOS 从那时起通过您的应用打开有效的通用链接。
小智 5
只是想我会添加一些我发现的东西,以防更多人在将来遇到与我相同的问题.这些主要与身份验证错误有关.
尽管apple没有明确说明,但apple-app-site-association
即使签名,该文件也必须通过https提供.用于https的证书也必须由apple信任.因此,虽然在设置 - >常规 - >配置文件中添加到设备的证书将允许Safari中的https,但它不允许通用链接工作.
在设备日志中,如果设备和服务器之间出现身份验证错误,则会打印一个值"TrustResultValue" : 4
.A中TrustResultValue
的5表示证书适用于错误的域(例如,test.com从www.test.com提供).A TrustResultValue
为4表示此用途不信任证书.
有可能是调试一些有用的步骤这里."测试访问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步被省略),那么应该没有错误.如果这是问题,则可以显示验证错误.
对于需要轻松测试打开(通用)链接的任何人,您还可以使用以下命令从终端在Simulator中打开链接:
xcrun simctl openurl booted yourapp_or_http://yourlink
例如:
xcrun simctl openurl booted https://www.google.com
我发现了 2 个有用的工具,您可以使用它们来调试通用链接的问题:
\n在手机上打开Settings
应用程序,选择Developer
菜单 -> 启用Association Domain Development
并选择Diagnostics
。插入您已添加到权利文件中的 URL,它将被验证:\n
第二个在Apple 的 TN3155:调试通用链接一文中提到。我建议您阅读全文,尤其是主机并验证您的 AASA章节。
\nswcutil
用于验证您的 AASA 文件的提及:
\n\n您可以通过以下方式在终端中使用这些命令:
\n运行
\nsudo swcutil dl -d <domain>
以检查 AASA JSON 是否可以成功下载。运行
\nsudo swcutil verify -d <domain> -j <path-to-JSON> [-u <URL>]
\n以检查下载的 .json AASA 文件的内容。验证\n您的域与 -d 匹配,并且您的 URL 路径模式与 \nJSON 与 -u 匹配。如果两者都成功,您将收到一条确认消息。对于包含 applinks:example.com 和上面显示的 AASA 的应用程序,\n这是使用 swcutil verify 的示例,其中 \xe2\x80\x9cs\xe2\x80\x9d 是服务,\n\xe2\x80\x9ca\ xe2\x80\x9d 是应用程序 ID,\xe2\x80\x9cd\xe2\x80\x9d 是域:
\nRun Code Online (Sandbox Code Playgroud)\n% sudo swcutil verify -d example.com -j ./example.json -u https://example.com/test\n{ s = applinks, a = ABCD123.com.example.app, d = example.com }:\nPattern "https://example.com/test" matched.\n
由于模式 /test 包含在 AASA 中,因此 JSON 已成功匹配模式并已得到验证。对于路径 /path/1,\n由于它被设置为在 AASA 中排除,您将看到一条消息\n确认排除:
\nRun Code Online (Sandbox Code Playgroud)\nPattern "https://example.com/path/1" blocked match.\n
归档时间: |
|
查看次数: |
66728 次 |
最近记录: |