通用链接在iOS 13上无法正常工作(AASA未下载)

24

iOS 12 上的通用链接运行良好,但我在昨天更新到iOS 13.1后遇到了问题。当点击应该打开应用程序的URL时,它们只是在浏览器中打开。

一些使用iOS 13的用户报告了同样的问题。

再次说明,在iOS 12.4上我从未遇到过这个问题。

我认为AASA文件没有被正确下载。我尝试从Safari顶部出现的横幅中点击打开按钮来解决这个问题,但这并没有帮助。

有时候,经过几次重新安装和重启后,它可以正常工作,但是当你再次重新安装时,它就会停止工作。

我在这篇博客文章https://ios13.dev/universal-links-debugging-on-ios-13-cjwsux93w001p6ws1swtstmzc中发现了描述查看日志的方法。

我导出了sysdiagnose,并且我的swcutil_show.txt文件显示了我的应用程序的情况。

Service:              applinks
App ID:               (my app ID)
App Version:          102
Domain:               (app.myurl.com)
User Approval:        unspecified
Site/Fmwk Approval:   unspecified
Flags:                
Last Checked:         2019-09-26 00:48:24 +0000
Next Check:           2019-09-30 23:51:38 +0000

而其他应用则看起来像这样

Service:              applinks
App ID:               ZL6BUSYGB3.com.apple.news
App Version:          2300.5
Domain:               news.apple.com
Patterns:             {"/":"*"}
User Approval:        unspecified
Site/Fmwk Approval:   approved
Flags:                systemApplication
Last Checked:         2019-09-25 18:45:50 +0000
Next Check:           2019-09-30 17:49:04 +0000

由于某些原因,缺少来自AASA的Patterns,并且Site/Fmwk Approval未指定。

我也尝试在多次重新安装和重新启动后,在通用链接工作时导出sysdiagnose。 我的应用程序确实有与Site/Fmwk Approval approvedPatterns相关的内容。

是否有人在iOS 13上遇到类似的问题?任何帮助都将不胜感激。


我在我们的应用程序中也遇到了同样的问题。目前还没有解决方案。 - Athir Nuaimi
1
即使在13.1.2版本上也遇到了相同的问题,有什么想法吗? - Danny Ho
我在13.3上看到了这个问题... - Darren Ehlers
同样的问题在13.2.3上也存在,唉!什么时候能修复呢? - Mohsin Khubaib Ahmed
6个回答

25

经过多次测试,我发现以下格式适用于iOS12和iOS13。iOS12绝对要求每个details字典条目都包含appIDpaths参数才能正常工作。另一方面,iOS13希望第一个条目包含appIDscomponents。这意味着第一个条目必须包含所有4个参数,以支持Autofill (包括保存密码提示)和Universal Links在两个平台上的使用。

具有讽刺意味的是,这种格式无法通过Apple App Search API验证工具,但可以在Branch上工作...FTS!另请注意,将您的用户名和密码UITextField放在不同的VC上是行不通的(您将无法获得保存密码提示)。我不得不在我们的密码屏幕上添加一个“假”的用户名UITextField,以便被操作系统检测到,并且不要隐藏它,也不要使宽度或高度为0px(因此基本上将其大小设置为1x1px,使用清除文本和背景填充并填写来自之前VC的用户名)。

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appIDs": [ "ABCDE12345.com.domain.app", "ABCDE12345.com.domain.app2" ],
        "appID": "ABCDE12345.com.domain.app",
        "components": [
          {
            "/": "/documentationsucksforios13",
            "comment": "This documentation is awful"
          }
        ],
        "paths": [ "/documentationsucksforios12" ]
      },
      {
        "appID": "ABCDE12345.com.domain.app2",
        "paths": [ "/validationtoolsdontwork" ]
      }
    ]
  },
  "webcredentials": {
    "apps": [ "ABCDE12345.com.domain.app" ]
  }
}

我正准备在我的应用程序上尝试类似的东西。你为什么要将 "appID": "ABCDE12345.com.domain.app" 和 "paths": [ "/documentationsucksforios12" ] 与 ios13 定义一起包含,而不是像你对 "appID": "ABCDE12345.com.domain.app2" 所做的那样作为细节数组中的不同元素? - Jero
2
我的测试表明,如果第一个元素不包含两者中的任何一个,它在iOS13或iOS12上都无法正常工作,具体取决于你删除哪个。 - Sylvain Gravel
1
这必须是一个被接受的答案:它在iOS12和iOS13上都能工作。 - displayname
1
我有“paths”:[“*”]。有人能帮我如何使用组件编写,以便对于每个域URL链接,它都应该打开应用程序吗? - Vinit Ingale
@SylvainGravel 即使路径在组件部分中指定了,我是否仍需要添加路径键? - Akshay
@Akshay 对于iOS12的支持,是的。我的帖子中已经详细描述了。 - Sylvain Gravel

5

看起来对于ios13,apple-site-app-association 作为新格式

{
  "applinks": {
      "details": [
           {
             "appIDs": [ "ABCDE12345.com.example.app", "ABCDE12345.com.example.app2" ],
             "components": [
               {
                  "#": "no_universal_links",
                  "exclude": true,
                  "comment": "Matches any URL whose fragment equals no_universal_links and instructs the system not to open it as a universal link"
               },
               {
                  "/": "/buy/*",
                  "comment": "Matches any URL whose path starts with /buy/"
               },
               {
                  "/": "/help/website/*",
                  "exclude": true,
                  "comment": "Matches any URL whose path starts with /help/website/ and instructs the system not to open it as a universal link"
               }
               {
                  "/": "/help/*",
                  "?": { "articleNumber": "????" },
                  "comment": "Matches any URL whose path starts with /help/ and which has a query item with name 'articleNumber' and a value of exactly 4 characters"
               }
             ]
           }
       ]
   },
   "webcredentials": {
      "apps": [ "ABCDE12345.com.example.app" ]
   }
}

如果您进行如此更新,它将在iOS 13上正常工作,但将不再兼容iOS 12。 - user1007522
@user1007522 很好的建议,我会更新答案,使其适用于两个版本。 - Kevin Amiranoff
1
第二个例子只适用于iOS 13,而不适用于iOS 12。有关正确的语法,请参阅Sylvain Gravel的答案。 - displayname
@nauke。看起来你是对的。我把它移除了,只留下了iOS 13的答案。 - Kevin Amiranoff
@KevinAmiranoff,由于某种原因,sysdiagnose文件在一个设备上没有显示我的应用程序的applinks,而在其他设备上却显示了。 该设备还未在swcutil_show.txt的内存使用或数据库部分中显示该应用程序。 我正在解决通用链接AASA下载的问题。 - Rajan Maheshwari

1
请将appId(TEAMID.bundle-identifier)替换为应用程序标识符。 这对我有效。

0

我们遇到了类似的问题。升级到iOS 13.1.2之后,现在似乎正常工作了。因此,苹果很可能已经解决了他们自己的错误。


4
即使在13.1.2版本上也遇到了同样的问题,已经有想法了吗? - Danny Ho
2
iOS 13.1.3 - 问题仍然存在 - nalexn

0
我曾经遇到过同样的问题,只出现在iOS 13上。结果发现自从iOS 13以来,appID入口大小写敏感。我的应用程序bundle标识符和AASA文件中的appID条目仅大小写不匹配。例如:
Bundle ID:TEAMID.com.company.EXAMPLE AASA入口:
{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "TEAMID.com.company.example",
        "paths": [ "*" ]
      }...

需要在AASA文件中修复appID,问题就解决了。


-2
尝试打开 设置 > Safari > 请求桌面网站 > 所有网站 > 关闭。
在iPad上更经常出现这个问题,因为在大屏幕上显示桌面网站比在小屏幕上更有意义。
来自苹果开发者论坛。
它解决了我的问题,太棒了。

那个回答与问题毫无关系。 - jplozano

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