如何通过Apple App Site Association文件实现特定规则的Universal Linking配置
如何通过Apple App Site Association文件实现特定规则的Universal Linking配置
看起来你踩了AASA通配符的常见坑——/journeys/*确实会匹配所有以/journeys/开头的路径,包括那些带嵌套子路径的,因为*会匹配任意字符(包括斜杠)。不过别慌,我们可以通过更精准的组件规则和条件判断,完美实现你要的效果。
核心思路是利用AASA的condition字段限制路径段数,再结合规则的匹配顺序(从上到下,第一个匹配的规则生效),就能精准区分/journeys/:id和/journeys/:id/xxx这类路径。
基础版配置(仅限制路径结构)
这个配置只校验路径段数,不限制id是否为数字,已经能满足你的核心需求:
{ "applinks": { "apps": [], "details": [ { "appIDs": [ "XYZ.example.app" ], "components": [ { "/": "/journeys/*", "exclude": false, "condition": { "$count": 2 }, "comment": "仅匹配恰好为 /journeys/:id 的路径(共2个路径段)" }, { "/": "/journeys/*/*", "exclude": true, "comment": "排除所有 /journeys/:id/ 之后还有子路径的情况" } ] } ] } }
规则解释:
- 第一条规则:通过
$count: 2限制总路径段数为2——也就是路径只能是/journeys/xxx(journeys是第一个段,xxx是第二个段),刚好对应你要的单级id路径,不会匹配带嵌套子路径的情况。 - 第二条规则:直接排除所有
/journeys/xxx/yyy及更深的路径,确保这些嵌套路径不会被拦截到App中。
进阶版配置(仅允许数字id)
如果需要更严格,只接受纯数字的id,可以在第一条规则里加上正则匹配条件:
{ "applinks": { "apps": [], "details": [ { "appIDs": [ "XYZ.example.app" ], "components": [ { "/": "/journeys/%2A", "exclude": false, "condition": { "$count": 2, "journeys": { "$matches": "^[0-9]+$" } }, "comment": "仅匹配 /journeys/:id 且id为纯数字的路径" }, { "/": "/journeys/*/*", "exclude": true, "comment": "排除所有 /journeys/:id/ 之后的嵌套路径" } ] } ] } }
测试和注意事项
- 配置更新后,记得清空设备缓存:可以卸载重装App,或者用模拟器的
xcrun simctl openurl booted <你的测试链接>命令直接测试。 - 规则顺序很重要:一定要把更具体的规则放在前面,宽泛的规则放在后面,因为AASA会采用第一个匹配的规则。
- 务必覆盖所有测试场景:比如
/journeys/123(应被拦截)、/journeys/123/documents(不应被拦截)、/journeys/abc(用了数字校验的话,不应被拦截)。
内容来源于stack exchange
相关产品推荐
相关产品推荐

