【契约影响】§3.1[2]仅 native 实现细节,H5 无感 先前 QQShare.shareLink 只拼 version/cflag/req_type/url/title/description 6 个字段,QQ 客户端识别失败 → 只打开主页,不弹好友选择。对齐 msext QQShareManager.shareToQQFriend:QQShareTypeNews URL Scheme fallback 路径 补齐: - 公共参数:src_type=app / app_id / share_id / file_type=news / callback_type=scheme / callback_name=QQ<hex(appID,8)> / thirdAppDisplayName / app_name(后两者 base64+urlenc) - 内容参数:News 类型 title/desc/url 必须 base64 后再 URL-encode(与 msext line 513-515 一致) 新增常量(沿用 daoqi 注册值): appID = 102793577 (daoqi kQQAppID) appIDHex = 06208169 (callback_name 后缀,QQ 协议要求) appName = 进贤聚友棋牌 (msext kQQAppName 同源) Info.plist 增加 CFBundleURLSchemes tencent102793577 —— QQ 客户端识别 "调用者已在 Info.plist 注册 AppID"的前置条件,没这一项 QQ 直接拒绝弹 分享面板。 ⚠️ AppID 102793577 在 QQ 互联开放平台绑给 com.chao.msext。新外壳 bundle id com.skyapp.ylgamehall —— QQ 客户端唤起 UI 时实测大概率不严格校验, 但若后续遇到拒绝/回调失败,需到 https://connect.qq.com/ 重新注册 AppID 绑给新 bundle id,只改 QQShare 顶部 3 个常量 + Info.plist 即可。 截图分享(type==2)保持剪贴板 + 引导框模式 —— URL Scheme 内联 base64 1080p 截图编码后 URL ≈ 5MB,iOS openURL 不可靠。
119 lines
4.7 KiB
Plaintext
119 lines
4.7 KiB
Plaintext
<?xml version="1.0" encoding="UTF-8"?>
|
||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||
<plist version="1.0">
|
||
<dict>
|
||
<key>UIApplicationSceneManifest</key>
|
||
<dict>
|
||
<key>UIApplicationSupportsMultipleScenes</key>
|
||
<false/>
|
||
<key>UISceneConfigurations</key>
|
||
<dict>
|
||
<key>UIWindowSceneSessionRoleApplication</key>
|
||
<array>
|
||
<dict>
|
||
<key>UISceneConfigurationName</key>
|
||
<string>Default Configuration</string>
|
||
<key>UISceneDelegateClassName</key>
|
||
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
|
||
</dict>
|
||
</array>
|
||
</dict>
|
||
</dict>
|
||
<key>NSAppTransportSecurity</key>
|
||
<dict>
|
||
<!-- 企业签 / 超签分发场景,后端域名可能调整(zip CDN / 配置服 / 七牛 / 错误日志
|
||
上报等),白名单维护成本高于安全收益。决策:全局放行,由代码层面通过 HTTPS
|
||
优先 + URLSession session 校验保证非白名单的第三方 SDK 流量自身仍走加密通道。
|
||
详见 ADR-008 / CLAUDE.md「不上架 App Store,通过企业签 / 超签 / TF 分发」。 -->
|
||
<key>NSAllowsArbitraryLoads</key>
|
||
<true/>
|
||
</dict>
|
||
<key>UIRequiresFullScreen</key>
|
||
<true/>
|
||
<key>UIStatusBarHidden</key>
|
||
<false/>
|
||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||
<true/>
|
||
<!--
|
||
LaunchScreen 阶段(iOS 在 app 进程尚未启动、device idiom 尚未识别的早期窗口)
|
||
只看顶层 UISupportedInterfaceOrientations,不识别 ~iphone / ~ipad 后缀变体。
|
||
Xcode 26 的 General → Deployment Info UI 只会写 INFOPLIST_KEY_*_iPhone /
|
||
INFOPLIST_KEY_*_iPad 两条带后缀的 key,会导致 LaunchScreen 默认 portrait 渲染、
|
||
再被旋转 90° 适配横屏设备(视觉:splash 内容横躺)。在 Info.plist 里显式补一份
|
||
无后缀 key 修复 LaunchScreen orientation。
|
||
-->
|
||
<key>UISupportedInterfaceOrientations</key>
|
||
<array>
|
||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||
</array>
|
||
<!--
|
||
LSApplicationQueriesSchemes — canOpenURL 白名单(iOS 9+ 必须声明,否则
|
||
canOpenURL 总返回 false)。本项目分享接入:
|
||
- QQ(URL Scheme 路径,不依赖 SDK):mqq / mqqapi / mqqopensdkfriend 等
|
||
- 抖音(URL Scheme + Photos 路径,不依赖 SDK):snssdk1128
|
||
- 微信(Phase 4.E SDK 接入):weixin / weixinULAPI / weixinURLParamsAPI
|
||
-->
|
||
<key>LSApplicationQueriesSchemes</key>
|
||
<array>
|
||
<string>mqq</string>
|
||
<string>mqqapi</string>
|
||
<string>mqqopensdkfriend</string>
|
||
<string>mqqopensdkapiV2</string>
|
||
<string>mqqopensdkapiV3</string>
|
||
<string>mqqopensdkapiV4</string>
|
||
<string>snssdk1128</string>
|
||
<string>weixin</string>
|
||
<string>weixinULAPI</string>
|
||
<string>weixinURLParamsAPI</string>
|
||
</array>
|
||
<!--
|
||
CFBundleURLTypes — 第三方 SDK 回调跳回本 App 用的 URL Scheme。
|
||
- 微信(Phase 4.E SDK 接入):wx586a9b321e56efb7(沿用 msext AppID,
|
||
docs/SDK-Integration-Guide.md §0)
|
||
- QQ(URL Scheme 分享路径):tencent102793577(沿用 daoqi AppID。
|
||
callback 用于 QQ 客户端把分享结果跳回本 App。当前 sharesuccess
|
||
走 fire-and-forget 不依赖回调,但**声明 URL Scheme 是 QQ 客户端
|
||
识别"调用者已注册 AppID"的前置条件**,没有这一项 QQ 会拒绝弹分
|
||
享面板,只打开主页。详见 Source/Share/QQShare.swift。)
|
||
-->
|
||
<key>CFBundleURLTypes</key>
|
||
<array>
|
||
<dict>
|
||
<key>CFBundleURLName</key>
|
||
<string>weixin</string>
|
||
<key>CFBundleURLSchemes</key>
|
||
<array>
|
||
<string>wx586a9b321e56efb7</string>
|
||
</array>
|
||
</dict>
|
||
<dict>
|
||
<key>CFBundleURLName</key>
|
||
<string>tencent</string>
|
||
<key>CFBundleURLSchemes</key>
|
||
<array>
|
||
<string>tencent102793577</string>
|
||
</array>
|
||
</dict>
|
||
</array>
|
||
<!--
|
||
NSPhotoLibraryAddUsageDescription — Phase 4.D 抖音分享需要保存截图 / 远端图
|
||
到相册让用户在抖音 app 里选取(msext DouyinShareManager.m 同款流程)。
|
||
用 addOnly 权限级别(仅写不读),iOS 14+ 弹窗对用户更友好。
|
||
-->
|
||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||
<string>需要将分享内容保存到相册,以便您在抖音中选取分享</string>
|
||
<!--
|
||
NSLocationWhenInUseUsageDescription — Phase 5 高德定位 startlocation handler
|
||
使用前提(iOS 14+ 必须显式申请)。文案用 SGDefineInfo.h gamehallname 字面。
|
||
-->
|
||
<key>NSLocationWhenInUseUsageDescription</key>
|
||
<string>进贤聚友棋牌需要访问您的位置以提供本地化服务</string>
|
||
<!--
|
||
NSMicrophoneUsageDescription — Phase 3.C 录音 (prepareaudio handler) 使用前提。
|
||
-->
|
||
<key>NSMicrophoneUsageDescription</key>
|
||
<string>进贤聚友棋牌需要访问您的麦克风录制语音消息</string>
|
||
</dict>
|
||
</plist>
|