// // SharePlatform.swift // ylgamehall // // 分享平台抽象 + ShareContent 数据载荷。 // // 策略模式:微信 / QQ / 抖音 各自实现 SharePlatform 协议,由 ShareCenter // 按 sharefriend / 用户选择分发。 // // **fire-and-forget 语义**:share 调用即认为分享流程已发起;H5 端的 // sharesuccess 在 FriendsShareHandler 解析参数后立即触发(与原 msext // gameController.m 同款"乐观策略",由用户明示有意为之)。各平台 share() // 只负责拉起对应 UI / URL Scheme,不再回传结果。 // // 详见 docs/H5-Native-Implementation-Design.md §8.2 ShareKit。 // import Foundation import UIKit /// 分享内容(H5 → Native 桥的 friendsShare 参数解析后的 Swift 类型)。 /// 项目默认 SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor 让 struct 也跨 actor 受限; /// 标 nonisolated 让 handler 闭包(@Sendable async)可自由构造与传递。 nonisolated public struct ShareContent: Sendable { /// 分享给好友("1")还是朋友圈("2") public let sharefriend: String /// msext 旧描述:1 微信 / 2 微信 / 3 闲聊。新代码读了但不用(SharePanel 由用户选平台决定)。 /// 保留字段以维持契约 §3.1 [2]兼容性 public let sharetype: String /// 1 链接 / 2 截图 / 其他 = 按链接处理(原 WechatShareManager 行为,无独立远端图分支) public let type: String /// 链接 URL public let webpageUrl: String public let title: String public let desc: String public init( sharefriend: String, sharetype: String, type: String, webpageUrl: String, title: String, desc: String ) { self.sharefriend = sharefriend self.sharetype = sharetype self.type = type self.webpageUrl = webpageUrl self.title = title self.desc = desc } } /// 分享场景:好友 / 朋友圈(仅微信有意义;QQ / 抖音 暂不区分)。 public enum ShareScene: Sendable { case friend // 微信好友 / QQ 好友 case timeline // 微信朋友圈 / QQ 空间 } @MainActor public protocol SharePlatform: AnyObject { /// 平台唯一标识(用于 log) var name: String { get } /// 平台 app 是否已安装(用于 SharePanel 按钮灰显) var isInstalled: Bool { get } /// 拉起分享 UI;fire-and-forget,不回传结果(sharesuccess 已在 handler 层先发) func share(_ content: ShareContent, scene: ShareScene) }