从Android应用调用PWA:自定义URL Scheme配置疑问
解决PWA通过自定义Scheme从Android应用打开的问题
嘿,这个问题我之前帮朋友踩过坑——自定义Scheme可不是直接用manifest里的应用名称/短名称,得专门配置协议处理器或者Intent Filter才行!下面分两种常见场景给你详细说明:
场景1:纯浏览器安装的PWA(未打包成原生APK)
如果你的PWA是直接通过Chrome、Edge这类浏览器安装到桌面的,那得在manifest.json里加个protocol_handlers字段来注册自定义Scheme,配置示例如下:
{ "name": "My PWA", "short_name": "MyPWA", "start_url": "/mypage", // 其他manifest配置(比如icons、display这些)... "protocol_handlers": [ { "protocol": "web+mypwascheme", "url": "/%s" } ] }
这里有几个关键细节要注意:
- 按照W3C规范,自定义Web Scheme得用
web+开头,避免和原生应用的Scheme冲突 url里的%s是占位符,会自动替换成Scheme后面的完整内容(比如web+mypwascheme://http://my.test.host/mypage会被解析到你的PWA路由/http://my.test.host/mypage,你可以根据自己的业务逻辑调整这个路由)- 配置完一定要卸载旧的PWA,重新从浏览器安装——因为浏览器只会在安装PWA的时候读取协议处理器的配置,改了manifest不重装是不会生效的
另外,目前主流Chromium内核浏览器(Chrome、Edge)对protocol_handlers支持都不错,其他小众浏览器可能支持有限,测试的时候优先用这些主流浏览器。
场景2:打包成Trusted Web Activity(TWA)的PWA
如果你的PWA已经用Bubblewrap之类的工具打包成了原生APK,那得在Android项目的AndroidManifest.xml里加Intent Filter来处理自定义Scheme,步骤很简单:
- 找到启动Activity的配置,添加上Intent Filter:
<activity android:name="com.google.androidbrowserhelper.trusted.LauncherActivity"> <!-- 其他Activity配置(比如theme、launchMode这些)... --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 这里填你的自定义Scheme --> <data android:scheme="mypwascheme" /> </intent-filter> </activity>
- 重新打包APK安装到设备,这样其他Android应用调用
mypwascheme://http://my.test.host/mypage时,系统就会唤起你的TWA应用了。
额外提醒
- 测试前一定要确认PWA已经正确安装(桌面有独立图标,能离线运行)
- 纯PWA的调用格式是
web+mypwascheme://xxx,注意Scheme后面是://,不是你之前写的:(空格会导致解析失败) - 如果还需要通过普通HTTP/HTTPS链接唤起PWA,记得把manifest里的
scope和start_url配置正确,并且display设为standalone或fullscreen
按照上面的方法配置后,应该就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者Alex Radyuk
相关产品推荐
相关产品推荐

