M3(T-M3-13): 分享面板对齐原工程——微信SDK + QQ/抖音系统分享

对齐 Android SharePanelHelper 流程:H5 friendsSharetypeUrlToptitleDescript →
原生弹自定义面板(微信/QQ/抖音) → 按所选平台分享。

- common ShareEvents:SHOW_PANEL + SharePanelRequest/Result;ShareProvider 经一次性
  resultEvent 与 entry 容器一对一解耦(双槽实例隔离,避免广播串扰)
- ShareProvider 重构:微信走 SDK(type2 Canvas截图→WXImageObject / 其他→WXWebpageObject;
  scene 好友/朋友圈;回传 sharesuccess);QQ/抖音走 @kit.ShareKit 系统分享(文本/图片/链接/视频,
  不集成对应 SDK、不回传);截图失败统一降级
- 截图:CapabilityContext.captureCanvas(WebSlot 用 controller.runJavaScript 取 canvas
  toDataURL,非激活/出错返回空);FileSystem.writeBytes 落盘;fileUri 给 WXImageObject/系统分享
- entry SharePanel 组件 + BridgeGameContainer 顶层叠加;重复面板/销毁均取消回投防 once 悬挂

真机验证项:微信开放平台注册后的真分享、系统分享面板拉起、canvas 截图

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lanterngamescn
2026-06-26 08:00:03 +08:00
co-authored by Claude Opus 4.8
parent 01e4c0e99e
commit 5cbe5d4dd0
8 changed files with 478 additions and 21 deletions
+27
View File
@@ -0,0 +1,27 @@
/**
* 分享面板事件名 + 载荷(跨模块共享:ShareProvider(feature_capabilities) 发 SHOW_PANEL →
* BridgeGameContainer(entry) 订阅弹出自定义分享面板 → 用户选平台后经一次性 resultEvent 回投给 ShareProvider)。
*
* 对齐原 Android「自定义三按钮分享面板」(SharePanelHelper:微信/QQ/抖音 + 点空白关闭=取消)。
* 能力层不持 UI;面板 UI 在 entry 容器。一对一回传:ShareProvider 生成唯一 resultEvent
* EventBus.once(resultEvent) 自动注销,避免多 Provider 实例广播串扰。
* 载荷用具名 interfaceArkTS 严格:禁 Record/无类型对象字面量),且禁传函数。
*/
export class ShareEvents {
/** 请求弹出分享面板。 */
static readonly SHOW_PANEL: string = 'share.showPanel';
}
/** SHOW_PANEL 载荷。 */
export interface SharePanelRequest {
/** sharetypeBean 的原始 JSON(透传,由 ShareProvider 解析)。 */
data: string;
/** 用户选定平台后回投的一次性事件名(ShareProvider 已 EventBus.once 监听)。 */
resultEvent: string;
}
/** resultEvent 载荷(用户选定结果回投)。 */
export interface SharePanelResult {
/** 'wechat' | 'qq' | 'douyin' | 'cancel' */
platform: string;
}