苹果应用网站关联(Apple-app-site-association)无法正常工作。

14
我已经实现了使用我的iOS应用程序进行深度链接的 apple-app-site-association
我创建了一个没有扩展名的.JSON文件,并将其放置在我的网站根目录中。
现在,在任何浏览器上,我都可以看到该文件的位置为https://example.com/apple-app-site-association

以下是apple-app-site-association文件内部的json主体-

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "AppID.bundleIdentifier",
                "paths": [ "*"]
            }
        ]
    }
}

我在我的网站(使用angular.js)的.htaccess中添加了以下内容 -

<FilesMatch "^apple-app-site-association$"> ForceType application/json </FilesMatch>

我已经在Xcode和developer.apple.com中启用了“关联域名”,但是当我尝试安装新的构建时,它无法工作。通过查看设备日志,我发现以下错误。

请帮忙看一下并告诉我哪里出了问题。

[SWC] ### Bad apple-app-site-association JSON: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}


哦,这个 JSON 代码是我从 developer.apple.com 上获取的。那怎么可能出错呢?如果你认为有问题,请给我一些纠正后的代码吧!如果可以的话。。!! - onCompletion
@EricAya 我刚刚就是这样做的。从苹果官网复制内容,粘贴到一个空的Sublime Text文件中,并保存为apple-app-site-association文件。但仍然不明白为什么它不起作用。你有关于如何调试JSON以获得正确格式的任何想法吗? - onCompletion
@EricAya 现在我按照你的方法操作了。我已经在 jsonlint.com 上检查了 JSON,它显示为有效的 JSON,但仍然遇到相同的问题。对于发生了什么事情感到非常困惑..!! - onCompletion
我们能否在生产位置看到实际的现场文件?顺便说一下,里面没有机密信息 - 共享是安全的,不会构成安全风险。 - Alex Bauer
5个回答

15

测试文件是否已正确配置的最佳方法是使用

curl -v https://app-site-association.cdn-apple.com/a/v1/yourdomain.com

或者
curl -v https://app-site-association.cdn-apple.com/a/v1/sub.domain.com

如果您收到了“apple-app-site-association”的JSON响应,则说明您的配置正确,您可以检查关联域名的配置。尝试卸载和重新安装应用,或尝试重启您的iPhone,可能会有帮助。
但是如果您没有从上面的curl请求中收到JSON响应,则问题必须与服务器配置有关。

这非常有用。谢谢!苹果公司在哪里记录了这个URL模式? - CIFilter

12

11
文件已经被适当地托管,这一点可以通过使用以下命令进行确认:
curl -I https://pravin-dev.slicepay.in/apple-app-site-association

你可以使用Apple的Applebot来爬取你的网站以验证apple-app-site-association。但是,这只能完全验证你的应用是否处于活动状态。
问题可能不在于你的关联文件。你应该验证你的应用确实正在检查https://pravin-dev.slicepay.in/apple-app-site-association而不是https://slicepay.in/apple-app-site-association。请在你的能力中的相关域部分和.entitlements文件中仔细检查你的applinks,确保它们被正确生成。如果没有指定pravin-dev子域,你的应用程序可能不会在正确的位置查找。
正如你所知道的那样,你必须卸载应用程序才能重新检查apple-app-site-association。

Ensure capabilities includes subdomain Ensure entitlements file was set properly


和你的一样,但我仍然遇到同样的问题。记住,我想这个错误是在iOS设备日志中出现的。 - onCompletion
2
我卸载并重新安装了应用程序,但我的在apple-app-site-association中新添加的路径仍然无法工作。有任何想法吗? - Hlung

3
我也遇到过这个问题;文件结构正确,可通过 .well-known 访问,权限设置正确...
结果发现关闭并重新启动设备可以解决问题。我认为 iOS 会在重新启动时重新获取应用程序的通用链接。
如果其他方法都失败了,请尝试关闭并重新启动设备。

2
哥们,我真希望几个小时前就看到这个,那样就能省下我很多时间去找出我做错了什么。哈哈,谢谢! - Chan Jing Hong

-3

看起来文件在服务器上以错误的类型提供。如果您尝试在Web浏览器中加载有效的AASA文件(https://branchmaps.app.link/apple-app-site-association),您会发现它立即下载,生成的文件没有类型。您的文件在浏览器中显示,并在下载时带有JSON文件类型。

如果您将文件保存为apple-app-site-association.json,然后删除扩展名,请尝试直接从Atom/Sublime/任何其他软件中保存它,以确保操作系统不嵌入元数据。

您还可以使用免费的深度链接平台,例如Branch.io(完全透明披露:我是Branch团队的一员),无需处理此服务器配置 :)


我正在使用Sublime创建JSON文件,并将其部署到我们的服务器上,该服务器使用Apache 2进行维护,前端使用Anguler进行开发。我还在.htaccess中使用了以下代码<FilesMatch "^apple-app-site-association$"> ForceType application/json </FilesMatch>,但没有结果。 - onCompletion
@bradkratky 是的,我有。非常抱歉 - 我通常会记得在这里放置那个声明,但不知何故错过了它 :(. 现在已经修复了。 - Alex Bauer
@unexpectedNil 我想知道你的<FilesMatch>表达式是否有误匹配的情况。不妨尝试使用更简单的<Files>表达式来替代吧? <Files "apple-app-site-association"> ForceType application/json </Files> - Alex Bauer
@AlexBauer 别担心,谢谢。我从答案中得到了这个感觉!我认为他的JSON设置正确,使用curl命令可以让我得到正确的内容类型。 - bradkratky
大家好,非常感谢你们的努力。我会按照你们说的去尝试,然后尽快跟你们汇报。 :) - onCompletion
有趣的是,当我查看一些已知良好的AASA文件(如Yelp、Pinterest、TripIt等)时,它们要么使用content-type为“text/plain”,要么使用“application/pkcs7-mime”。 - Alex Bauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接