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

侧加载React Native应用无法通过PWA的Intent URL启动求助

从PWA启动侧加载RN应用的解决方案

可以实现,核心是调整RN应用的Intent过滤器配置,并构造正确的Intent URL,以下是具体步骤:

1. 修正RN应用的AndroidManifest.xml Intent过滤器

当前你的RN应用Intent过滤器缺少android.intent.category.BROWSABLE类别,这是从Web环境(包括PWA)启动应用的必要条件——浏览器只会匹配包含该类别的Intent过滤器,否则会默认跳转到Google Play商店尝试查找应用。

修改后的Intent过滤器示例(可保留原有配置,补充必要类别或新增专属过滤器):

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 为原有SEND/VIEW过滤器补充BROWSABLE类别 -->
<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" /> <!-- 新增该类别 -->
    <data android:mimeType="application/json"/>
    <data android:mimeType="text/plain"/>
</intent-filter>
<!-- 可选:新增自定义动作过滤器,避免和其他应用冲突 -->
<intent-filter>
    <action android:name="com.your.app.LAUNCH_RN_APP" /> <!-- 自定义动作名,按需修改 -->
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

2. 构造匹配的Intent URL

根据RN应用的Intent过滤器配置,构造对应的Intent URL,以下是两种可行示例:

示例1:匹配原有VIEW动作+MIME类型

const myPackage = "com.your.rn.app"; // 替换为RN应用实际包名
const myType = "text/plain"; // 对应过滤器中的MIME类型
const myExtra = "your_custom_data"; // 需要传递的额外参数

const intentUrl = `intent://#Intent;action=android.intent.action.VIEW;type=${myType};package=${myPackage};S.extra=${myExtra};end`;
window.location.href = intentUrl;

示例2:使用自定义动作(更精准)

如果新增了自定义动作的过滤器,使用以下URL:

const myPackage = "com.your.rn.app";
const myAction = "com.your.app.LAUNCH_RN_APP"; // 和过滤器中的动作名完全一致
const myExtra = "your_custom_data";

const intentUrl = `intent://#Intent;action=${myAction};package=${myPackage};S.extra=${myExtra};end`;
window.location.href = intentUrl;

3. 关键注意事项

  • 包名必须精准:确保myPackage的值和RN应用AndroidManifest.xml中的package属性完全一致,侧加载应用的包名不会因安装方式改变。
  • 处理跳转失败场景:可添加定时器检测跳转是否成功,若一段时间后页面未离开,说明应用未安装或Intent匹配失败,可提示用户:
    const timer = setTimeout(() => {
        alert("无法打开应用,请确认已安装");
    }, 1000);
    
    window.addEventListener("blur", () => {
        clearTimeout(timer);
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:33:35