You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Capacitor应用的App Link打开对应路由?

解决方案:SvelteKit + Capacitor Android 深度链接路由跳转问题

这不是预期情况,不需要修改MainActivity,只需在SvelteKit客户端通过@capacitor/app模块处理深度链接的路由跳转即可,具体步骤如下:

1. 确保安装@capacitor/app模块

如果还没安装,执行命令:

npm install @capacitor/app
npx cap sync

2. 在全局布局组件中添加深度链接处理逻辑

推荐在+layout.svelte中编写代码,因为它是全局生效的客户端组件,能覆盖所有页面的跳转场景:

<script>
import { App } from '@capacitor/app';
import { goto } from '$app/navigation';
import { onMount } from 'svelte';

onMount(async () => {
    // 处理应用冷启动时的深度链接
    const launchUrl = await App.getLaunchUrl();
    if (launchUrl?.url) {
        handleDeepLink(launchUrl.url);
    }

    // 监听应用从后台唤醒时的深度链接
    App.addListener('appUrlOpen', (event) => {
        if (event.url) {
            handleDeepLink(event.url);
        }
    });
});

function handleDeepLink(url: string) {
    const parsedUrl = new URL(url);
    // 验证域名,避免处理外部链接
    if (parsedUrl.host === 'my-domain.com') {
        // 跳转到对应SvelteKit路由
        goto(parsedUrl.pathname);
    }
}
</script>

3. 为什么之前在hooks.client.ts或+layout.ts中尝试失败?

  • hooks.client.ts:代码执行时机过早,此时Capacitor的原生API还未初始化完成,无法获取到启动URL。
  • +layout.ts:它是服务端/客户端通用的逻辑文件,在服务端环境下无法调用Capacitor的客户端API,会导致报错或无响应。

额外注意事项

  • 确保SvelteKit的adapter-static配置正确,若使用动态路由,需在svelte.config.js中设置fallback: 'index.html',避免路由404:
// svelte.config.js
import adapter from '@sveltejs/adapter-static';

export default {
    kit: {
        adapter: adapter({
            fallback: 'index.html'
        })
    }
};
  • 测试深度链接需在Android真机或模拟器上进行,浏览器环境无法触发Capacitor的深度链接事件。

内容的提问来源于stack exchange,提问作者Corrl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:09:58