在两个不同的应用程序上支持相同域名的通用链接?

16

我有一个应用程序,支持通用链接,并且目前已经在应用商店中。

假设它支持域名www.example.com,因此可以通过这个域名轻松地打开通用链接。我们将在关联域中添加applinks:www.example.com。

现在假设我想发布另一个应用程序,也支持相同的域名。那么iOS如何区分哪个应用程序通过通用链接打开?

3个回答

27

为了在两个不同的应用程序中支持具有单一域的 通用链接,您需要更改现有的 apple-app-site-association 文件,位于 https://{domain}/apple-app-site-association。

仅支持单个应用程序

对于单个应用程序支持,它看起来像这样

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "1234ABCDE.com.domain.myapp",
                "paths": ["*"]
            }
        ]
    }
}

支持多个应用程序

为了支持多个应用程序,您需要在apple-app-site-association中的details数组中添加一个键值对。它看起来像这样:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "1234ABCDE.com.domain.myApp",
                "paths": ["*"]
            },
            {
                "appID": "1234ABCDE.com.domain.mySecondApp",
                "paths": ["*"]
            },
            {
                "appID": "1234ABCDE.com.domain.myThirdApp",
                "paths": ["*"]
            }
        ]
    }
}

apple-app-site-association文件的通用格式

该文件如下所示:

{
"applinks": {
    "apps": [ ],
    "details": [
        {
            "appID": "{app_prefix}.{app_identifier}",
            "paths": [ "/path/to/content", "/path/to/other/*", "NOT /path/to/exclude" ]
        },
        {
            "appID": "TeamID.BundleID2",
            "paths": [ "*" ]
        }
    ]
}
}

参考文献

如何在iOS应用程序中支持通用链接并设置服务器?


3
您的苹果应用网站关联文件实现存在问题。您的所有应用都支持“*”,这意味着您的所有应用都可以处理该域的所有页面。这样,每次单击通用链接时,最后安装的应用程序将打开。请修复此问题。 - Ankit Srivastava
这就是为什么要添加苹果应用站点关联通用格式的原因。 - Vineet Choudhary
排除子域名而不是路径怎么样? - Ali A. Jalil

4
我找到了解决方案,虽然很简单。 我的问题是我的第一个应用程序通过在apple-app-site-association文件的路径部分中声明“*”来支持所有页面。现在我所要做的就是在我想让第二个应用程序处理的路径前面添加NOT。 例如"NOT /cabs"。我还没有测试过这是否有效。完成后,我会尽快发布更新。

4
哇,你选择接受了自己的答案而不是实际答案。你的“答案”应该作为对实际答案的评论。 - David
2
@David 如果你仔细看的话,你会发现我在 Vineet 回答之前就回答了将近一个月,并且我在那时就接受了我的答案,因为它是实际问题的正确解决方案。 - Ankit Srivastava
2
你说得很对。答案的顺序(在活动视图中)让我感到困惑,我确信我也检查了日期,但显然没有。对于我的评论语气,我很抱歉。 - David
@David 没问题 :) - Ankit Srivastava
排除子域名而不是路径怎么样? - Ali A. Jalil
显示剩余2条评论

2

苹果应用网站关联文件示例

{
    "applinks": {
        "apps": [],
        "details": [{
            "appID": "D3KQX62K1A.com.example.photoapp",
            "paths": ["/albums"]
            },
            {
            "appID": "D3KQX62K1A.com.example.videoapp",
            "paths": ["/videos"]
        }]
    }
}

重要提示:数组中字典的顺序决定系统查找匹配项的顺序。第一个匹配成功,您可以指定一个应用程序处理网站内指定路径,另一个应用程序处理其余内容。
参考资料: https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/enabling_universal_links 最初的回答:数组中字典的排列顺序会影响系统查找匹配项的顺序。第一个匹配成功的字典将被使用,这样您就可以指定一个应用程序来处理网站内的特定路径,而另一个应用程序来处理其余内容。请参考以下链接了解更多信息:https://developer.apple.com/documentation/uikit/core_app/allowing_apps_and_websites_to_link_to_your_content/enabling_universal_links

这个有效吗?因为我尝试过实现相同的情景,但它只会打开相同的应用程序。@foskon - Raditya Kurnianto

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