Skip to content

fix(0.72): 修复首次拉起微信无回调(冷启动回调丢失)#70

Open
Zemin-Lin wants to merge 1 commit intoreact-native-oh-library:br_rnoh0.72from
Zemin-Lin:br_rnoh0.72
Open

fix(0.72): 修复首次拉起微信无回调(冷启动回调丢失)#70
Zemin-Lin wants to merge 1 commit intoreact-native-oh-library:br_rnoh0.72from
Zemin-Lin:br_rnoh0.72

Conversation

@Zemin-Lin
Copy link

Summary

本 PR 修复 Harmony 端 react-native-wechat-lib首次冷启动拉起微信后无回调的问题。
Fixes #(请替换为实际 issue 编号)

Motivation / Root Cause

在冷启动场景中,微信回调 want 可能先到达 EntryAbility.onCreate/onNewWant,但此时 registerApp 还未执行,WechatLibTurboModule.wxApi 尚未初始化。
原逻辑中 handleWant 使用可选链直接调用,wxApi == null 时会直接返回,导致首个回调丢失。

What changed

文件:

  • harmony/react_native_wechat_lib/src/main/ets/WechatLibTurboModule.ets

主要改动:

  1. 新增 pendingWants: Array<Want>,用于缓存 wxApi 初始化前收到的回调。
  2. 新增 flushPendingWants(),在 wxApi 初始化后回放缓存回调。
  3. 修改 handleWant(want)
    • wxApi 未初始化:先入队再返回。
    • wxApi 已初始化:立即分发。
  4. 修改 registerApp(...)
    • createWXAPI(appId) 后调用 flushPendingWants()

Impact scope

仅影响 Harmony 端 WeChat 回调时序处理逻辑(handleWant/registerApp);
不改变已初始化状态下的原有调用行为。

Test Plan

手工验证步骤:

  1. 安装并启动应用,确保是冷启动(可先清应用后台/重启应用)。
  2. 调用微信相关能力(如 sendAuthRequest 或分享能力),触发拉起微信。
  3. 在微信侧完成/取消后返回应用。
  4. 观察 JS 层回调(onResp)是否在首次操作时即可收到。
  5. 重复执行一次(热启动场景),确认行为正常且无重复回调。

建议关注日志点:

  • EntryAbility.onCreate/onNewWant
  • WechatLibTurboModule.handleWant
  • WXEventHandler.onResp

Checklist

  • 已经在真机设备或模拟器上测试通过

  • 已经与 Android 或 iOS 平台做过效果/功能对比

  • 已经添加了对应 API 的测试用例(如需要)

  • 已经更新了文档(如需要)

  • 更新了 JS/TS 代码 (如有)

  • I have tested this on a device and a simulator

  • I have already compared the effects/features with the Android or iOS platforms

  • I added a test for the API (if applicable)

  • I have updated the JS/TS (if applicable)

  • I updated the documentation (if applicable)

Signed-off-by: a1461848339 <1461848339@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant