Phase 4.F:微信截图分享 type=2 / 远端图分享 type=其它
按 msext gameController.m:637-678 字面行为,WechatShare 按 content.type 分发: - type=1 → shareLink(已有) - type=2 → captureScreenshot → JPEG 0.6 + thumb 0.4x → shareImage - type=其它 → downloadRemote(URL) → JPEG 0.9 + thumb 0.4x → shareImage 新增: - ImageProvider.scaledThumb(_:scale:):等价 msext FuncPublic imageByScalingAndCroppingForSize 0.4x 缩放;微信 SDK setThumbImage: 内部再压到 32KB - WeChatManager.ShareImage 结构 + shareImage(_:scene:) 异步包装 (WXImageObject + WXMediaMessage.setThumbImage,FIFO 串行复用 sharePending) 契约:与 type=1 一致,调成功 → sharesuccess 反向 callback(success/cancelled 都发);errCode=-2 → cancelled;其它 errCode → failed。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
d9d9554d9f
commit
8e4c36d1c8
@@ -9,6 +9,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
#if canImport(WechatOpenSDK)
|
||||
import WechatOpenSDK
|
||||
@@ -37,18 +38,44 @@ public final class WechatShare: SharePlatform {
|
||||
return .notInstalled(platform: name)
|
||||
}
|
||||
let wxScene: WeChatManager.ShareScene = (scene == .timeline) ? .timeline : .session
|
||||
// 当前仅链接分享(type == "1")走真实 SDK;截图 / 远端图分享待 Phase 4.F 接入
|
||||
// WXImageObject + WXMediaMessage.thumbData
|
||||
do {
|
||||
try await WeChatManager.shared.shareLink(
|
||||
.init(
|
||||
url: content.webpageUrl,
|
||||
title: content.title,
|
||||
desc: content.desc,
|
||||
thumbnailURL: nil // type=2/3 缩略图待 Phase 4.F
|
||||
),
|
||||
scene: wxScene
|
||||
)
|
||||
switch content.type {
|
||||
case "1":
|
||||
// 链接分享(msext gameController.m:613-635)
|
||||
try await WeChatManager.shared.shareLink(
|
||||
.init(
|
||||
url: content.webpageUrl,
|
||||
title: content.title,
|
||||
desc: content.desc,
|
||||
thumbnailURL: nil
|
||||
),
|
||||
scene: wxScene
|
||||
)
|
||||
case "2":
|
||||
// 截图分享(msext gameController.m:637-658)
|
||||
let shot = try ImageProvider.captureScreenshot()
|
||||
guard let imageData = shot.jpegData(compressionQuality: 0.6) else {
|
||||
return .failed(reason: "screenshot JPEG encode failed")
|
||||
}
|
||||
let thumb = ImageProvider.scaledThumb(shot)
|
||||
try await WeChatManager.shared.shareImage(
|
||||
.init(imageData: imageData, thumb: thumb),
|
||||
scene: wxScene
|
||||
)
|
||||
default:
|
||||
// 远端图分享(msext gameController.m:659-680:type 是其它值就当 URL 远端图)
|
||||
let remote = try await ImageProvider.downloadRemote(content.webpageUrl)
|
||||
// msext 直接用原始 data 作为大图;这里 UIImage 已是 decode 后的,
|
||||
// 用 jpegData 重新编码维持等价(避免持有未压缩的原始字节膨胀)。
|
||||
guard let imageData = remote.jpegData(compressionQuality: 0.9) else {
|
||||
return .failed(reason: "remote image JPEG encode failed")
|
||||
}
|
||||
let thumb = ImageProvider.scaledThumb(remote)
|
||||
try await WeChatManager.shared.shareImage(
|
||||
.init(imageData: imageData, thumb: thumb),
|
||||
scene: wxScene
|
||||
)
|
||||
}
|
||||
return .success
|
||||
} catch let WeChatError.shareFailed(errCode) {
|
||||
if errCode == -2 { return .cancelled }
|
||||
|
||||
Reference in New Issue
Block a user