Phase 4.D:DouyinShare URL Scheme + Photos 真实落地(不依赖 SDK)
移植 msext DouyinShareManager.m:201-269 shareImageToDouyin 完整流程到 Swift。
新增基础设施(Phase 4.F 截图 / 远端图也共用):
Source/Share/ImageProvider.swift:
- captureScreenshot() throws -> UIImage:UIGraphicsImageRenderer 截
keyWindow(含状态栏 + letterbox 黑边 + WebView),与 msext
FuncPublic.getImageWithFullScreenshot 等价
- downloadRemote(_:) async throws -> UIImage:URLSession.data(from:)
下载远端 URL → UIImage 解码
- ImageProviderError 错误分类(noKeyWindow / downloadFailed / decodeFailed /
badURL)
Source/Share/PhotoLibrarySaver.swift:
- save(_:) async throws:使用 PHAccessLevel.addOnly(iOS 14+ 推荐,仅写
相册不读,弹窗更友好)+ PHAssetChangeRequest.creationRequestForAsset
- 自动处理权限三态(authorized/notDetermined 请求 + denied/restricted 抛错)
DouyinShare.share 完整实现:
- 拿图片源:
* type == "2" 截图 / type == "1" 链接(退化为当前屏截屏,msext 行为)
→ ImageProvider.captureScreenshot
* type == 其它(远端图 URL)→ ImageProvider.downloadRemote(webpageUrl)
- PhotoLibrarySaver.save 保存到相册(含 .permissionDenied 错误回 .failed)
- UIPasteboard.general.image = image 兜底(抖音可能从剪贴板读图)
- 按 msext 顺序尝试 4 个 URL Scheme:
snssdk1128://camera / publish / share/image / 基础 scheme
canOpenURL 命中即 await UIApplication.open + 调起即 success
- 全部失败返回 .failed("所有抖音 URL Scheme 都调起失败")
Info.plist 加 NSPhotoLibraryAddUsageDescription("需要将分享内容保存到
相册,以便您在抖音中选取分享"),addOnly 权限弹窗用此文案。
BuildProject 通过
Plan §5 Phase 4.4 勾选
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
aff5ee7633
commit
39c1b5164d
@@ -493,11 +493,17 @@ Contract Design Plan(本文档)
|
||||
- `canOpenURL` 检查 + `await UIApplication.open` 异步打开;调起即视为 success
|
||||
- **当前仅链接分享**(type == "1");type == "2" 截图 / 远端图 留 Phase 4.F
|
||||
- Info.plist 加 `LSApplicationQueriesSchemes`:`mqq` / `mqqapi` / `mqqopensdkfriend` / `mqqopensdkapiV2/V3/V4`
|
||||
- [ ] **4.4** **抖音分享走 URL Scheme + Photos,不依赖 SDK**
|
||||
- 移植 msext `DouyinShareManager.m` 简化版
|
||||
- URL Scheme:`snssdk1128://share/video` / `snssdk1128://camera`
|
||||
- Photos:保存截图到相册让用户在抖音 app 里选取(H5 截图 / 远端图共用此路径)
|
||||
- Info.plist 加 `NSPhotoLibraryAddUsageDescription` 写入权限文案
|
||||
- [x] **4.4** **抖音分享走 URL Scheme + Photos,不依赖 SDK**(4.D 完成)
|
||||
- 新增 `Source/Share/ImageProvider.swift`:`captureScreenshot()` 截 keyWindow + `downloadRemote(_:)` 异步下载远端图(共用基础设施)
|
||||
- 新增 `Source/Share/PhotoLibrarySaver.swift`:保存到相册(PHAccessLevel.addOnly 权限,iOS 14+ 推荐)
|
||||
- `Source/Share/DouyinShare.swift` 升级移植 msext `DouyinShareManager.m:201-269` `shareImageToDouyin`:
|
||||
1. 拿图片源:type=2 / type=1 都退化为截屏(抖音不支持纯链接,与 msext 行为一致);type=其它=远端图 URL → downloadRemote
|
||||
2. PhotoLibrarySaver.save 保存相册
|
||||
3. `UIPasteboard.general.image = image` 兜底
|
||||
4. 按 msext 顺序尝试 `snssdk1128://camera` / `publish` / `share/image` / 基础 scheme
|
||||
5. 调起即视为 success
|
||||
- Info.plist 加 `NSPhotoLibraryAddUsageDescription` 文案
|
||||
- BuildProject 通过
|
||||
- [ ] **4.3** `Source/SDK/WeChat/WeChatSDK.swift` 启动注册(Design §4.2 `registerFull` + 全部 12 个 `MMAPP_SUPPORT_*` flag)
|
||||
- [ ] **4.4** `Source/SDK/WeChat/WeChatManager.swift`(@MainActor)
|
||||
- 持久 delegate
|
||||
|
||||
Reference in New Issue
Block a user