// // WeChatShareService.swift // suixinkan // import UIKit import WechatOpenSDK /// 微信分享服务,封装文本、网页、图片分享能力(不含支付)。 enum WeChatShareService { /// 是否已安装微信且支持 Open SDK。 static var isWeChatAvailable: Bool { WXApi.isWXAppInstalled() && WXApi.isWXAppSupport() } /// 分享纯文本到微信。 @MainActor static func shareText( _ payload: WeChatTextSharePayload, scene: WeChatShareScene, completion: ((WeChatShareResult) -> Void)? = nil ) { let trimmed = payload.text.trimmingCharacters(in: .whitespacesAndNewlines) guard !trimmed.isEmpty else { completion?(.invalidPayload("分享文本不能为空")) return } let request = SendMessageToWXReq() request.bText = true request.text = trimmed request.scene = scene.wxSceneValue WeChatManager.shared.sendShareRequest(request, completion: completion) } /// 分享网页链接到微信。 @MainActor static func shareWebPage( _ payload: WeChatWebPageSharePayload, scene: WeChatShareScene, thumbImage: UIImage? = nil, completion: ((WeChatShareResult) -> Void)? = nil ) { let title = payload.title.trimmingCharacters(in: .whitespacesAndNewlines) let url = payload.url.trimmingCharacters(in: .whitespacesAndNewlines) guard !title.isEmpty else { completion?(.invalidPayload("分享标题不能为空")) return } guard !url.isEmpty else { completion?(.invalidPayload("分享链接不能为空")) return } let webpageObject = WXWebpageObject() webpageObject.webpageUrl = url let message = WXMediaMessage() message.title = title message.description = payload.description message.mediaObject = webpageObject if let thumbImage, let thumbData = WeChatThumbImageProcessor.makeThumbData(from: thumbImage) { message.thumbData = thumbData } let request = SendMessageToWXReq() request.bText = false request.message = message request.scene = scene.wxSceneValue WeChatManager.shared.sendShareRequest(request, completion: completion) } /// 分享图片到微信。 @MainActor static func shareImage( _ payload: WeChatImageSharePayload, scene: WeChatShareScene, thumbImage: UIImage? = nil, completion: ((WeChatShareResult) -> Void)? = nil ) { guard !payload.imageData.isEmpty else { completion?(.invalidPayload("分享图片不能为空")) return } let imageObject = WXImageObject() imageObject.imageData = payload.imageData let message = WXMediaMessage() message.mediaObject = imageObject if let thumbImage, let thumbData = WeChatThumbImageProcessor.makeThumbData(from: thumbImage) { message.thumbData = thumbData } else if let image = UIImage(data: payload.imageData), let thumbData = WeChatThumbImageProcessor.makeThumbData(from: image) { message.thumbData = thumbData } let request = SendMessageToWXReq() request.bText = false request.message = message request.scene = scene.wxSceneValue WeChatManager.shared.sendShareRequest(request, completion: completion) } /// 获取 App 图标,用作分享缩略图兜底。 static func defaultThumbImage() -> UIImage? { guard let icons = Bundle.main.infoDictionary?["CFBundleIcons"] as? [String: Any], let primary = icons["CFBundlePrimaryIcon"] as? [String: Any], let iconFiles = primary["CFBundleIconFiles"] as? [String], let iconName = iconFiles.last else { return nil } return UIImage(named: iconName) } }