如何让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
相关产品推荐
相关产品推荐

