Skill: haodongling/android-sharesdk-integration (version 2.0.0)

--- name: android-sharesdk-integration description: Interactive guide for integrating MobTech ShareSDK into Android projects with 6-step workflow. Use when user says "我要在app中增加分享能力", "ShareSDK集成", "Android分享功能", "配置微信分享", or asks about ShareSDK setup, Gradle configuration, platform devInfo, privacy compliance, or social sharing SDK integration. Supports step-by-step interactive integration with user confirmation at each step. tags: - android - sharesdk - mobtech - social-share - gradle - privacy - interactive-integration --- # Android ShareSDK 集成 Skill ## 适用场景 当用户提到以下任一主题时，使用本 skill： - android sharesdk - ShareSDK 集成 - Mob ShareSDK 接入 - Android 社交分享 SDK 配置 - ShareSDK 的 Gradle 配置 - ShareSDK appKey / appSecret 配置 - ShareSDK 隐私合规 - 微信 / 微信朋友圈等平台在 ShareSDK 中的 devInfo 配置 - 微信分享集成 - **我要在app中增加分享能力** - **我要在Android项目中接入分享功能** - **帮我配置微信分享** - **一键集成 ShareSDK** - **快速接入 ShareSDK** - **自动配置 ShareSDK** 如果用户问题明确与 Android 的 ShareSDK 接入、工程配置、平台参数、隐私合规有关，应优先使用本 skill。 --- ## 6 步交互式集成工作流 当用户表达集成 ShareSDK 的意图时，执行以下 6 步交互式流程。每步操作前都需要展示内容给用户确认，获得明确同意后再执行。 --- ### 步骤 1：启动流程 #### 1-1 触发识别 用户可能通过以下方式表达集成意图： - "我要在app中增加分享能力" - "帮我集成 ShareSDK 到 Android 项目" - "配置微信分享" - "一键集成 ShareSDK" - "Android 分享功能怎么接入" #### 1-2 询问项目路径 **主动询问用户**： ``` 我来帮你集成 ShareSDK 分享功能。 请提供需要集成的 Android 项目根路径，例如： /Users/xxx/your-android-project 请确保项目包含 app/build.gradle 文件。 ``` #### 1-3 验证路径合法性 **验证逻辑**： 1. 检查路径是否存在 2. 检查路径下是否有 `app/build.gradle` 或 `settings.gradle` 文件 3. 检查是否为有效的 Android 项目结构 **如果路径不合法**： ``` 路径验证失败，可能原因： - 路径不存在：{path} - 未找到 app/build.gradle 文件，请确认这是 Android 项目根目录 请重新提供正确的项目路径。 ``` **如果路径合法**：进入步骤 2 --- ### 步骤 2：注册社交平台信息 #### 2-1 生成配置模板文件 **操作**： 1. 执行 `assets/generate_excel_template.py`，生成 `assets/ShareSDK_Config_Template.xlsx` 2. 将生成的 `assets/ShareSDK_Config_Template.xlsx` 复制到 `{path}` 下 3. 在 `{path}` 下命名为 `ShareSDK_Config.xlsx` **告知用户**： ``` 已在你项目的根目录生成 {path}/ShareSDK_Config.xlsx 配置文件。 请打开该文件，按以下步骤填写： 1. 在"基础信息"Sheet 中填写 MobTech 的 appKey 和 appSecret （从 https://www.mob.com/ 注册应用获取） 2. 在相应平台的 Sheet 中填写需要启用的平台配置 （如微信、QQ、微博等，不需要的平台可留空） 3. "平台申请地址"Sheet 中有各开放平台的申请链接 填写完成后告诉我"填好了"，我将继续下一步。 ``` #### 2-2 等待用户填写完成 等待用户回复"填好了"或类似表达。 #### 2-3 读取并验证配置 **操作**：读取用户项目根目录的 `ShareSDK_Config.xlsx` 文件 **验证规则**： | 检查项 | 规则 | 不通过时的提示 | |--------|------|---------------| | appKey | 必填，不能为空字符串 | "基础信息 Sheet 中的 appKey 未填写，请从 MobTech 官网获取" | | appSecret | 必填，不能为空字符串 | "基础信息 Sheet 中的 appSecret 未填写" | | 微信 appId | 如填写，必须以 `wx` 开头 | "微信 appId 格式不正确，应以 wx 开头（如 wx1234567890abcdef）" | | 微信 appSecret | 如填写，长度应为 32 位 | "微信 appSecret 格式不正确，应为 32 位字符串" | | QQ appId | 如填写，必须为纯数字 | "QQ appId 格式不正确，应为纯数字（如 100371282）" | | QQ appKey | 如填写，长度应为 32 位 | "QQ appKey 格式不正确，应为 32 位字符串" | | 微博 appKey | 如填写，不能为空 | "微博 appKey 未填写" | **类型转换规则**： - `appId`、`appKey`、`appSecret`、`userName`、`path` 等标识符字段：**强制转为字符串**，即使 Excel 中填写的是数字（如 `12345`），也要转为 `"12345"` - `withShareTicket`、`bypassApproval`、`shareByAppClient` 等布尔字段：转为 `true`/`false`（不加引号） - `miniprogramType` 等数字字段：转为整数（不加引号） **如果不合法**： ``` 配置信息验证失败，请修正以下问题： {具体问题列表} - 第 1 条：{问题描述} - 第 2 条：{问题描述} 请修改 Excel 文件后保存，然后重新告诉我"填好了"。 ``` **如果合法**：提取配置信息，进入步骤 3 --- ### 步骤 3：完成 SDK 集成 #### 3-1 gradle环境配置 根据项目 AGP 版本（通过检查 `gradle/wrapper/gradle-wrapper.properties` 中的 distributionUrl 判断），选择对应配置方式。 ##### 文件 1：settings.gradle（AGP 7.0+） **展示内容**： ```groovy // 在文件开头添加以下内容 pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() maven { url "https://mvn.mob.com/android" } } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { gradlePluginPortal() google() mavenCentral() maven { url "https://mvn.mob.com/android" } } } ``` ##### 文件 2：项目级 build.gradle **展示内容**： ```groovy // 在 buildscript.dependencies 中添加 classpath "com.mob.sdk:MobSDK2:+" ``` ##### 文件 3：gradle.properties **展示内容**： ```properties # MobSDK 配置 MobSDK.spEdition=FP ``` ##### 文件 4：app/build.gradle **生成规则**： 1. **类型转换**： - `appId`、`appKey`、`appSecret` 等标识符：**强制转为字符串**（加引号），即使 Excel 中填写的是数字（如 `12345` → `"12345"`） - `withShareTicket`、`bypassApproval` 等布尔字段：`true`/`false`（不加引号） - `miniprogramType` 等数字字段：整数（不加引号） 2. **已启用平台**：根据 Excel 中填写的平台生成完整配置块 3. **未启用平台**：以注释形式填充到 `devInfo` 中，方便后续启用： ```groovy devInfo { Wechat { ... } // 已启用 // ========== 以下平台未启用，取消注释并填写参数即可使用 ========== // SinaWeibo { // appKey "" // appSecret "" // redirectUri "https://api.weibo.com/oauth2/default.html" // shareByAppClient true // } } ``` 4. **验证失败处理**： - 如果 Excel 数据有错误（如 appKey 为空、微信 appId 不以 wx 开头等），**不生成 build.gradle**，而是向用户展示错误列表，要求修正 Excel 后重新执行 **展示内容**（根据用户填写的 Excel 信息生成）： ```groovy // 在文件开头添加插件 apply plugin: 'com.mob.sdk' // 在文件末尾添加 MobSDK 配置 MobSDK { appKey "{用户填写的appKey}" appSecret "{用户填写的appSecret}" gui true ShareSDK { loopShare true devInfo { // 根据用户填写的平台动态生成 {各平台配置块} } } } ``` **询问**："以上是要添加到 app/build.gradle 的内容，是否确认修改？" #### 3-2 执行 Gradle Sync **说明**：修改 build.gradle 后，需要同步 Gradle 配置才能生效： - 命令行 `./gradlew`：下载依赖、编译代码 - Android Studio Sync：让 IDE 解析 build.gradle 配置，更新项目结构索引 两者作用不同，即使命令行成功，仍建议在 Android Studio 中执行 Sync。 **尝试自动执行**： ```bash cd {project_path} ./gradlew --refresh-dependencies ``` **如果成功**： ``` 命令行 Gradle Sync 成功，依赖已拉取。 ⚠️ 如果你在 Android Studio 中开发，请再执行一次 IDE Sync： 1. 打开 Android Studio 2. 点击菜单栏 File -> Sync Project with Gradle Files 3. 或点击右上角大象图标（Sync Now） ``` **如果失败**： ``` 自动 Gradle Sync 失败，可能原因： - Gradle 未配置环境变量 - 网络问题无法下载依赖 请在 Android Studio 中手动执行： 1. 打开项目 2. 点击菜单栏 File -> Sync Project with Gradle Files 3. 或点击 Gradle 面板中的刷新按钮 ``` 进入步骤 4 --- ### 步骤 4：插入隐私授权回调 #### 4-1 说明合规原因 **向用户说明**： ``` 根据 MobTech 隐私合规要求和中国区 App 上架规范，使用 ShareSDK 需要在用户同意隐私政策后才能初始化 SDK。 你需要在 App 中： 1. 首次启动时展示《隐私政策》弹窗 2. 用户点击"同意"按钮后，调用隐私授权代码 3. 用户点击"不同意"则不应调用 请告知我：用户点击隐私政策"同意"按钮的回调代码在哪个文件、哪个方法中？ 例如：MainActivity.java 的 onPrivacyAgreed() 方法或者具体位置如:com/kit/app/MainActivity.java:80 ``` #### 4-2 询问回调位置 等待用户告知具体的文件路径和方法名。 #### 4-3 展示并确认插入代码 **展示要插入的代码**： ```java // 用户同意隐私政策后调用 MobSDK.submitPolicyGrantResult(true); ``` **完整示例**： ```java public void onPrivacyAgreed() { // 用户点击同意按钮 // === ShareSDK 隐私授权 === com.mob.MobSDK.submitPolicyGrantResult(true); // ======================= // 其他业务逻辑... } ``` **询问**："以上代码将插入到 {文件} 的 {方法} 中，是否确认？" #### 4-4 执行插入 用户确认后，将代码插入指定位置。 进入步骤 5 --- ### 步骤 5：插入分享代码 #### 5-1 收集分享需求 **询问用户**： ``` 现在来配置分享功能，请告诉我： 1. 希望在哪个位置执行分享？ - 例如：MainActivity 的分享按钮点击事件 - 或：ArticleDetailFragment 的 onShareClick() 方法 2. 分享内容是什么？ - 标题： - 文本内容： - 链接URL： - 图片URL（可选）： 3. 分享方式： - A. 弹出分享面板让用户选择平台（一键分享） - B. 直接分享到指定平台（如微信） 4. 目标平台（如选择B）： - 根据用户在 Excel 中配置的平台动态显示 - 例如：用户配置了微信和QQ，则显示"微信 / 微信朋友圈 / QQ" - 未配置的平台不显示，避免用户选择后分享失败 ``` #### 5-2 生成并展示分享代码 根据用户需求生成代码： **场景 A：一键分享面板** ```java private void showShare() { OnekeyShare oks = new OnekeyShare(); oks.disableSSOWhenAuthorize(); oks.setTitle("{标题}"); oks.setText("{文本内容}"); oks.setUrl("{链接URL}"); oks.setImageUrl("{图片URL}"); oks.setCallback(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Platform platform, int i, Throwable throwable) { Toast.makeText(MainActivity.this, "分享失败: " + throwable.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void onCancel(Platform platform, int i) { Toast.makeText(MainActivity.this, "分享取消", Toast.LENGTH_SHORT).show(); } }); oks.show(this); } ``` **场景 B：指定平台分享（微信示例）** ```java private void shareToWechat() { Platform wechat = ShareSDK.getPlatform("Wechat"); cn.sharesdk.wechat.friends.Wechat.ShareParams sp = new cn.sharesdk.wechat.friends.Wechat.ShareParams(); sp.setTitle("{标题}"); sp.setText("{文本内容}"); sp.setUrl("{链接URL}"); sp.setShareType(Platform.SHARE_WEBPAGE); wechat.setPlatformActionListener(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { Toast.makeText(MainActivity.this, "微信分享成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Platform platform, int i, Throwable throwable) { Toast.makeText(MainActivity.this, "微信分享失败", Toast.LENGTH_SHORT).show(); } @Override public void onCancel(Platform platform, int i) { Toast.makeText(MainActivity.this, "微信分享取消", Toast.LENGTH_SHORT).show(); } }); wechat.share(sp); } ``` **询问**："以上是生成的分享代码，将插入到 {位置}，是否确认？" #### 5-3 执行插入 用户确认后，将代码插入指定位置。 进入步骤 6 --- ### 步骤 6：补充说明 #### 6-1 生成项目级 README **操作**：使用 `templates/SHARESDK_README.md` 模板，填充以下占位符后写入用户项目根目录： | 占位符 | 填充内容 | |--------|----------| | `{date}` | 当前日期 | | `{platforms_list}` | 用户启用的平台列表（如：微信、QQ、微博）| | `{project_path}` | 用户项目路径 | | `{privacy_file}` | 步骤 4 中用户指定的隐私回调文件 | | `{privacy_method}` | 步骤 4 中用户指定的隐私回调方法 | | `{share_file}` | 步骤 5 中插入分享代码的文件 | | `{share_method}` | 步骤 5 中插入分享代码的方法名 | | `{share_platforms}` | 步骤 5 中用户选择的分享平台 | #### 6-2 完成告知 **向用户说明**： ``` ShareSDK 集成已完成！ 📁 生成的文件： - {project_path}/SHARESDK_README.md — 集成说明文档 📝 后续修改位置： - 修改 SDK 配置：app/build.gradle 中的 MobSDK { } 块 - 修改隐私授权位置：{privacy_file} 的 {privacy_method} 方法 - 修改分享逻辑：{share_file} 的 {share_method} 方法 📖 更多帮助： - 查看项目根目录的 SHARESDK_README.md - 官方文档：https://www.mob.com/wiki/list - 合规指南：https://www.mob.com/wiki/detailed?wiki=421&id=717 ⚠️ 重要提醒： 1. 确保微信/QQ 等平台的签名 MD5 与开放平台配置一致 2. 确保 App 有隐私政策并在用户同意后调用隐私授权代码 3. 如需添加更多分享平台，修改 app/build.gradle 的 devInfo 块 ``` --- ## 附录：技术参考 ### A. Gradle 配置参考 #### A.1 Gradle 插件 7.0 及以上 在 `settings.gradle` 第1行开始填充： ```groovy pluginManagement { repositories { gradlePluginPortal() google() mavenCentral() maven { url "https://mvn.mob.com/android" } } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS) repositories { gradlePluginPortal() google() mavenCentral() maven { url "https://mvn.mob.com/android" } } } ``` 在项目级 `build.gradle` 中： ```groovy buildscript { dependencies { classpath "com.mob.sdk:MobSDK2:+" } } ``` #### A.2 Gradle 插件 7.0 以下 在项目级 `build.gradle` 中配置： ```groovy allprojects { repositories { maven { url "https://mvn.zztfly.com/android" } } } buildscript { repositories { maven { url "https://mvn.zztfly.com/android" } } dependencies { classpath "com.mob.sdk:MobSDK2:+" } } ``` #### A.3 应用级启用插件 ```groovy apply plugin: 'com.android.application' apply plugin: 'com.mob.sdk' ``` #### A.4 gradle.properties 配置 **主动询问是否上架googleplay** 如果开发者回答:是/YES 则配置 ```properties MobSDK.spEdition=GPP ``` 否则(否/NO): 使用如下配置 ```properties MobSDK.spEdition=FP ``` --- ### B. SDK API 参考 #### B.1 一键分享 ```java private void showShare() { OnekeyShare oks = new OnekeyShare(); oks.disableSSOWhenAuthorize(); oks.setTitle("ShareSDK测试分享"); oks.setTitleUrl("http://sharesdk.cn"); oks.setText("这是通过ShareSDK分享的测试内容"); oks.setUrl("http://sharesdk.cn"); oks.setImageUrl("https://www.mob.com/public/img/logo_black.png"); oks.setCallback(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { Toast.makeText(MainActivity.this, "分享成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Platform platform, int i, Throwable throwable) { Toast.makeText(MainActivity.this, "分享失败", Toast.LENGTH_SHORT).show(); } @Override public void onCancel(Platform platform, int i) { Toast.makeText(MainActivity.this, "分享取消", Toast.LENGTH_SHORT).show(); } }); oks.show(this); } ``` #### B.2 指定平台分享（微信） ```java private void shareToWechat() { Platform wechat = ShareSDK.getPlatform("Wechat"); cn.sharesdk.wechat.friends.Wechat.ShareParams sp = new cn.sharesdk.wechat.friends.Wechat.ShareParams(); sp.setTitle("微信分享测试"); sp.setText("这是分享到微信的测试内容"); sp.setUrl("http://sharesdk.cn"); sp.setShareType(Platform.SHARE_WEBPAGE); wechat.setPlatformActionListener(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { Toast.makeText(MainActivity.this, "微信分享成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Platform platform, int i, Throwable throwable) { Toast.makeText(MainActivity.this, "微信分享失败", Toast.LENGTH_SHORT).show(); } @Override public void onCancel(Platform platform, int i) { Toast.makeText(MainActivity.this, "微信分享取消", Toast.LENGTH_SHORT).show(); } }); wechat.share(sp); } ``` #### B.3 指定平台分享（QQ） ```java private void shareToQQ() { Platform qq = ShareSDK.getPlatform("QQ"); cn.sharesdk.tencent.qq.QQ.ShareParams sp = new cn.sharesdk.tencent.qq.QQ.ShareParams(); sp.setTitle("QQ分享测试"); sp.setTitleUrl("http://sharesdk.cn"); sp.setText("这是分享到QQ的测试内容"); sp.setImageUrl("https://www.mob.com/public/img/logo_black.png"); sp.setSite("ShareSDK"); sp.setSiteUrl("http://sharesdk.cn"); qq.setPlatformActionListener(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { Toast.makeText(MainActivity.this, "QQ分享成功", Toast.LENGTH_SHORT).show(); } @Override public void onError(Platform platform, int i, Throwable throwable) { Toast.makeText(MainActivity.this, "QQ分享失败", Toast.LENGTH_SHORT).show(); } @Override public void onCancel(Platform platform, int i) { Toast.makeText(MainActivity.this, "QQ分享取消", Toast.LENGTH_SHORT).show(); } }); qq.share(sp); } ``` #### B.4 第三方登录 ```java Platform platform = ShareSDK.getPlatform(QQ.NAME); platform.setPlatformActionListener(new PlatformActionListener() { @Override public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) { String userId = platform.getDb().getUserId(); String [REDACTED_SECRET]).getToken(); } @Override public void onError(Platform platform, int i, Throwable throwable) { // 登录失败 } @Override public void onCancel(Platform platform, int i) { // 取消登录 } }); platform.showUser(null); ``` #### B.5 分享参数说明 | 方法 | 说明 | |------|------| | setTitle | 分享标题（微信、QQ空间等使用） | | setTitleUrl | 标题链接（仅LinkedIn、QQ空间使用） | | setText | 分享文本（所有平台都需要） | | setImageUrl | 网络图片地址 | | setUrl | 分享链接（微信、QQ等使用） | | setShareType | 分享类型：WEBPAGE（网页）、IMAGE（图片）、TEXT（文本） | --- ### C. 隐私合规要求 必须提醒用户： 1. App 需要有《隐私政策》 2. 首次冷启动展示隐私政策并获取用户同意 3. 同意后调用 `MobSDK.submitPolicyGrantResult(true)` 4. 不同意时不能调用该方法 在隐私政策中应包含： - 使用了 MobTech ShareSDK 服务 - 用于社交分享、第三方登录 - 可能会收集相关信息 完整合规指南：https://www.mob.com/wiki/detailed?wiki=421&id=717 --- ### D. 常见问题排查 | 问题 | 可能原因 | |------|----------| | 微信分享失败 | 签名MD5不一致、包名不一致、appId错误 | | QQ分享失败 | appId/appKey错误、未配置URL Scheme | | 微博分享失败 | appKey/appSecret错误、回调地址不匹配 | | 编译失败 | MobSDK插件未加载成功 | --- ### E. 平台申请地址汇总 | 平台 | 开放平台地址 | |------|-------------| | 微信/微信朋友圈/微信收藏 | https://open.weixin.qq.com | | QQ / QZone | https://connect.qq.com | | 新浪微博 | https://open.weibo.com | | Facebook | https://developers.facebook.com | | Twitter / X | https://developer.twitter.com | | Instagram | https://developers.instagram.com | | LinkedIn | https://www.linkedin.com/developers/apps | | Line | https://developers.line.biz/console/ | | KakaoTalk / KakaoStory | https://developers.kakao.com/console/app | | 支付宝 | https://open.alipay.com/platform/home.htm | --- ## 回答边界 - 仅聚焦 Android ShareSDK 工程集成与合规 - 不扩展到 iOS、服务端、非 MobTech SDK - 不伪造真实账号、密钥、签名值

path: README.md
content: # android-sharesdk-integration

一个面向 OpenClaw / ClawHub 的 Android ShareSDK 集成 Skill，采用 6 步交互式工作流程。

## 用途

当用户提到以下主题时触发：

- "我要在app中增加分享能力"
- "帮我集成ShareSDK到Android项目"
- "帮我配置微信分享"
- android sharesdk
- ShareSDK 集成
- Mob ShareSDK 接入
- ShareSDK Gradle 配置
- ShareSDK 隐私合规

## 目录结构

```
android-sharesdk-integration/
├── SKILL.md                              # 核心 Skill 定义（6步交互式工作流程）
├── REQUIRE.md                            # 平台配置字段详细说明（内部参考）
├── README.md                             # 本文件
├── examples/
│   └── example-prompts.md                # 示例触发问法
├── assets/
│   ├── ShareSDK_Config_Template.xlsx     # Excel 配置模板（供用户填写）
│   └── generate_excel_template.py        # 生成 Excel 模板的脚本
└── templates/
    └── SHARESDK_README.md                # 项目级 README 模板
```

## 6 步交互式集成工作流

本 Skill 采用交互式工作流程，每步操作前都会展示内容给用户确认：

1. **启动流程**：询问并验证项目路径
2. **注册社交平台信息**：生成 Excel 配置模板，用户填写后读取验证
3. **完成 SDK 集成**：逐个文件展示修改内容，确认后执行
4. **插入隐私授权回调**：询问回调位置，展示代码后插入
5. **插入分享代码**：收集分享需求，生成代码后插入
6. **补充说明**：生成项目级 README 文档

## 适配方向

- Android Gradle Plugin 7.0+
- Android Gradle Plugin 7.0 以下
- MobTech ShareSDK appKey / appSecret / devInfo 配置
- 首次冷启动隐私授权回传
- 一键分享面板 / 指定平台分享

## 建议放置位置

将此目录放入 OpenClaw workspace 的 `skills/` 目录中。

## 参考资料

- [Mob 文档中心](https://www.mob.com/wiki/list)
- [Mob SDK 下载中心](https://www.mob.com/download)
- [Mob SDK 合规指南](https://www.mob.com/wiki/detailed?wiki=421&id=717)


path: REQUIRE.md
content: # ShareSDK 一键集成配置模板

> **按需配置原则**：只填写需要启用的平台，未填写的平台将不会出现在配置中

---

## 基础信息（必填）

### MobSDK 基础配置

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | MobSDK应用Key，从MobTech官网获取 | |
| appSecret | MobSDK应用密钥 | |

---

## 分享平台配置

> **只填写需要启用的平台**，未填写 = 不启用

---

### 微信系列

#### 微信（好友）

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 微信应用ID | |
| appSecret | 微信应用密钥 | |
| userName | 微信小程序原始ID（分享小程序时需要） | |
| path | 小程序页面路径 | |
| withShareTicket | 是否带shareTicket | |
| miniprogramType | 小程序类型（0正式版、1开发版、2体验版） | |
| bypassApproval | 是否绕过审核（默认false） | |

#### 微信朋友圈

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 微信应用ID（与微信相同） | |
| appSecret | 微信应用密钥 | |
| bypassApproval | 是否绕过审核（默认false） | |

#### 微信收藏

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 微信应用ID（与微信相同） | |
| appSecret | 微信应用密钥 | |
| bypassApproval | 是否绕过审核（默认false） | |

---

### 腾讯系

#### QQ

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | QQ互联应用ID | |
| appKey | QQ互联应用Key | |
| shareByAppClient | 是否使用客户端分享（默认true） | |
| bypassApproval | 是否绕过审核（默认false） | |

#### QZone

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | QQ互联应用ID | |
| appKey | QQ互联应用Key | |
| shareByAppClient | 是否使用客户端分享（默认true） | |
| bypassApproval | 是否绕过审核（默认false） | |

#### 腾讯微博

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | 腾讯微博AppKey | |
| appSecret | 腾讯微博AppSecret | |
| callbackUri | 回调地址 | |

---

### 新浪系

#### 新浪微博

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | 新浪微博 App Key | |
| appSecret | 新浪微博 App Secret | |
| callbackUri | 回调地址 | |
| shareByAppClient | 是否使用客户端分享（默认true） | |

---

### 国外主流平台

#### Facebook

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Facebook App ID | |
| appSecret | Facebook App Secret | |
| callbackUri | 回调地址 | |
| faceBookLoginProtocolScheme | 登录协议Scheme | |
| faceBookAppType | App类型（默认game） | |
| shareByAppClient | 是否使用客户端分享 | |

#### Twitter / X

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Twitter App Key | |
| appSecret | Twitter App Secret | |
| callbackUri | 回调地址 | |
| IsUseV2 | 是否使用API v2（默认true） | |
| shareByAppClient | 是否使用客户端分享 | |
| bypassApproval | 是否绕过审核 | |

#### Instagram

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | Instagram App ID | |
| appSecret | Instagram App Secret | |
| callbackUri | 回调地址 | |

#### Google+

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | Google Client ID | |
| appSecret | Google Client Secret | |
| callbackUri | 回调地址 | |
| shareByAppClient | 是否使用客户端分享 | |

---

### 其他平台

#### 短信

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| （无需配置） | - | - |

#### 邮件

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| （无需配置） | - | - |

#### 复制链接

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| （无需配置） | - | - |

#### 人人网

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 人人网应用ID | |
| appKey | 人人网应用Key | |
| appSecret | 人人网应用密钥 | |

#### 开心网

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | 开心网AppKey | |
| appSecret | 开心网AppSecret | |
| callbackUri | 回调地址 | |

#### 豆瓣

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | 豆瓣AppKey | |
| appSecret | 豆瓣AppSecret | |
| callbackUri | 回调地址 | |

#### 有道云笔记

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| hostType | 服务器类型（product/sandbox/china） | |
| appKey | 有道云笔记AppKey | |
| appSecret | 有道云笔记AppSecret | |
| callbackUri | 回调地址 | |

#### 印象笔记

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| hostType | 服务器类型（product/sandbox/china） | |
| appKey | 印象笔记AppKey | |
| appSecret | 印象笔记AppSecret | |
| shareByAppClient | 是否使用客户端分享 | |

#### LinkedIn

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | LinkedIn App Key | |
| appSecret | LinkedIn App Secret | |
| callbackUri | 回调地址 | |
| shareByAppClient | 是否使用客户端分享 | |

#### Foursquare

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | Foursquare App ID | |
| appSecret | Foursquare App Secret | |
| callbackUri | 回调地址 | |

#### Pinterest

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | Pinterest App ID | |

#### Flickr

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Flickr App Key | |
| appSecret | Flickr App Secret | |
| callbackUri | 回调地址 | |

#### Tumblr

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Tumblr App Key | |
| appSecret | Tumblr App Secret | |
| callbackUri | 回调地址 | |

#### Dropbox

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Dropbox App Key | |
| appSecret | Dropbox App Secret | |
| callbackUri | 回调地址 | |

#### VKontakte

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | VKontakte App ID | |

#### 易信

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 易信应用ID | |
| bypassApproval | 是否绕过审核 | |

#### 易信朋友圈

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 易信应用ID | |
| bypassApproval | 是否绕过审核 | |

#### 明道

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | 明道AppKey | |
| appSecret | 明道AppSecret | |
| callbackUri | 回调地址 | |

#### Line

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | Line App ID | |
| appSecret | Line App Secret | |
| callbackUri | 回调地址 | |
| callbackscheme | 回调协议 | |

#### KakaoTalk

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | KakaoTalk App Key | |
| shareByAppClient | 是否使用客户端分享 | |

#### KakaoStory

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | KakaoStory App Key | |

#### WhatsApp

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| （无需配置） | - | - |

#### Pocket

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Pocket App Key | |

#### Instapaper

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Instapaper App Key | |
| appSecret | Instapaper App Secret | |

#### Facebook Messenger

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | Facebook Messenger App ID | |
| bypassApproval | 是否绕过审核 | |

#### Telegram

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appKey | Telegram App Key | |
| callbackUri | 回调地址 | |

#### 支付宝

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 支付宝App ID | |

#### 支付宝朋友圈

| 配置项 | 说明 | 您的信息 |
| ------ | ---- | -------- |
| appId | 支付宝App ID | |

---

## 配置说明

1. **appKey/appSecret**: 从 [MobTech官网](https://www.mob.com/) 注册应用获取
2. **sortId**: 用于控制平台在分享面板中的排序顺序，数字越小越靠前（自动生成）
3. **enable**: 设置为 `true` 启用该平台（自动设置）
4. **bypassApproval**: 部分平台支持绕过审核，仅限分享文字和图片

---
根据启用的平台，前往对应开放平台创建应用：

| 平台 | 开放平台地址 |
|------|-------------|
| 微信/微信朋友圈/微信收藏 | https://open.weixin.qq.com |
| QQ | https://connect.qq.com |
| 新浪微博 | https://open.weibo.com |
| Facebook | https://developers.facebook.com |
| Twitter | https://developer.twitter.com |
| Instagram | https://developers.instagram.com |

> **填写完成后，告诉我"填写好了"，我将自动完成集成配置**


path: assets/generate_excel_template.py
content: #!/usr/bin/env python3
"""
生成 ShareSDK 配置模板 Excel 文件
"""

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter
from pathlib import Path


def create_sheet_with_header(wb, sheet_name, headers, data):
    """创建带表头的 Sheet"""
    if sheet_name in wb.sheetnames:
        ws = wb[sheet_name]
    else:
        ws = wb.create_sheet(title=sheet_name)

    # 设置表头样式
    header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
    header_font = Font(bold=True, color="FFFFFF", size=11)
    header_alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)

    # 写入表头
    for col, header in enumerate(headers, 1):
        cell = ws.cell(row=1, column=col, value=header)
        cell.fill = header_fill
        cell.font = header_font
        cell.alignment = header_alignment

    # 写入数据
    for row_idx, row_data in enumerate(data, 2):
        for col_idx, value in enumerate(row_data, 1):
            cell = ws.cell(row=row_idx, column=col_idx, value=value)
            cell.alignment = Alignment(vertical="center", wrap_text=True)

    # 设置列宽
    ws.column_dimensions['A'].width = 25
    ws.column_dimensions['B'].width = 50
    ws.column_dimensions['C'].width = 40

    # 冻结首行
    ws.freeze_panes = 'A2'

    return ws


def create_platform_urls_sheet(wb):
    """创建平台申请地址 Sheet"""
    headers = ["平台", "开放平台地址", "说明"]
    data = [
        ["微信/微信朋友圈/微信收藏", "https://open.weixin.qq.com", "微信开放平台，需企业资质"],
        ["QQ / QZone", "https://connect.qq.com", "QQ互联平台"],
        ["新浪微博", "https://open.weibo.com", "微博开放平台"],
        ["Facebook", "https://developers.facebook.com", "Facebook for Developers"],
        ["Twitter / X", "https://developer.twitter.com", "Twitter Developer Portal"],
        ["Instagram", "https://developers.instagram.com", "Instagram Basic Display API"],
        ["Google+", "https://console.cloud.google.com/apis/credentials", "Google Cloud Console"],
        ["LinkedIn", "https://www.linkedin.com/developers/apps", "LinkedIn Developer Portal"],
        ["Line", "https://developers.line.biz/console/", "LINE Developers Console"],
        ["KakaoTalk / KakaoStory", "https://developers.kakao.com/console/app", "Kakao Developers"],
        ["支付宝", "https://open.alipay.com/platform/home.htm", "支付宝开放平台"],
        ["MobTech", "https://www.mob.com/", "用于获取 appKey/appSecret"],
    ]
    return create_sheet_with_header(wb, "平台申请地址", headers, data)


def create_basic_info_sheet(wb):
    """创建基础信息 Sheet"""
    headers = ["配置项", "说明", "您的信息（必填）"]
    data = [
        ["appKey", "MobSDK应用Key，从MobTech官网(https://www.mob.com/)注册应用获取", ""],
        ["appSecret", "MobSDK应用密钥，与appKey一同获取", ""],
    ]
    ws = create_sheet_with_header(wb, "基础信息", headers, data)

    # 标记必填项
    for row in range(2, 4):
        cell = ws.cell(row=row, column=1)
        cell.font = Font(bold=True, color="FF0000")

    return ws


def create_wechat_sheet(wb):
    """创建微信系列 Sheet"""
    headers = ["配置项", "说明", "您的信息"]
    data = [
        ["Wechat.appId", "微信应用ID，从微信开放平台获取", ""],
        ["Wechat.appSecret", "微信应用密钥", ""],
        ["Wechat.userName", "微信小程序原始ID（分享小程序时需要，格式：gh_xxxxxxxxxxx）", ""],
        ["Wechat.path", "小程序页面路径（如：pages/index/index.html）", ""],
        ["Wechat.withShareTicket", "是否带shareTicket（true/false）", ""],
        ["Wechat.miniprogramType", "小程序类型：0正式版、1开发版、2体验版", ""],
        ["Wechat.bypassApproval", "是否绕过审核（仅分享文字图片时可用，默认false）", ""],
        ["", "", ""],
        ["WechatMoments.appId", "微信朋友圈：与微信相同appId", ""],
        ["WechatMoments.appSecret", "微信朋友圈：与微信相同appSecret", ""],
        ["WechatMoments.bypassApproval", "是否绕过审核（默认false）", ""],
        ["", "", ""],
        ["WechatFavorite.appId", "微信收藏：与微信相同appId", ""],
        ["WechatFavorite.appSecret", "微信收藏：与微信相同appSecret", ""],
    ]
    return create_sheet_with_header(wb, "微信系列", headers, data)


def create_qq_sheet(wb):
    """创建QQ系列 Sheet"""
    headers = ["配置项", "说明", "您的信息"]
    data = [
        ["QQ.appId", "QQ互联应用ID", ""],
        ["QQ.appKey", "QQ互联应用Key", ""],
        ["QQ.shareByAppClient", "是否使用客户端分享（默认true）", ""],
        ["QQ.bypassApproval", "是否绕过审核（默认false）", ""],
        ["", "", ""],
        ["QZone.appId", "QQ空间：与QQ相同appId", ""],
        ["QZone.appKey", "QQ空间：与QQ相同appKey", ""],
        ["QZone.shareByAppClient", "是否使用客户端分享（默认true）", ""],
        ["QZone.bypassApproval", "是否绕过审核（默认false）", ""],
    ]
    return create_sheet_with_header(wb, "QQ系列", headers, data)


def create_weibo_sheet(wb):
    """创建微博 Sheet"""
    headers = ["配置项", "说明", "您的信息"]
    data = [
        ["SinaWeibo.appKey", "新浪微博 App Key", ""],
        ["SinaWeibo.appSecret", "新浪微博 App Secret", ""],
        ["SinaWeibo.redirectUri", "回调地址（默认：https://api.weibo.com/oauth2/default.html）", "https://api.weibo.com/oauth2/default.html"],
        ["SinaWeibo.shareByAppClient", "是否使用客户端分享（默认true）", ""],
    ]
    return create_sheet_with_header(wb, "微博", headers, data)


def create_overseas_sheet(wb):
    """创建海外平台 Sheet"""
    headers = ["配置项", "说明", "您的信息"]
    data = [
        ["Facebook.appKey", "Facebook App ID", ""],
        ["Facebook.appSecret", "Facebook App Secret", ""],
        ["Facebook.callbackUri", "回调地址", ""],
        ["Facebook.faceBookLoginProtocolScheme", "登录协议Scheme", ""],
        ["Facebook.faceBookAppType", "App类型（默认game）", ""],
        ["Facebook.shareByAppClient", "是否使用客户端分享", ""],
        ["", "", ""],
        ["Twitter.appKey", "Twitter App Key", ""],
        ["Twitter.appSecret", "Twitter App Secret", ""],
        ["Twitter.callbackUri", "回调地址", ""],
        ["Twitter.IsUseV2", "是否使用API v2（默认true）", ""],
        ["Twitter.shareByAppClient", "是否使用客户端分享", ""],
        ["", "", ""],
        ["Instagram.appId", "Instagram App ID", ""],
        ["Instagram.appSecret", "Instagram App Secret", ""],
        ["Instagram.callbackUri", "回调地址", ""],
        ["", "", ""],
        ["GooglePlus.appId", "Google Client ID", ""],
        ["GooglePlus.appSecret", "Google Client Secret", ""],
        ["GooglePlus.callbackUri", "回调地址", ""],
        ["GooglePlus.shareByAppClient", "是否使用客户端分享", ""],
    ]
    return create_sheet_with_header(wb, "海外平台", headers, data)


def create_other_sheet(wb):
    """创建其他平台 Sheet"""
    headers = ["配置项", "说明", "您的信息"]
    data = [
        ["LinkedIn.appKey", "LinkedIn App Key", ""],
        ["LinkedIn.appSecret", "LinkedIn App Secret", ""],
        ["LinkedIn.callbackUri", "回调地址", ""],
        ["LinkedIn.shareByAppClient", "是否使用客户端分享", ""],
        ["", "", ""],
        ["Line.appId", "Line App ID", ""],
        ["Line.appSecret", "Line App Secret", ""],
        ["Line.callbackUri", "回调地址", ""],
        ["Line.callbackscheme", "回调协议", ""],
        ["", "", ""],
        ["KakaoTalk.appKey", "KakaoTalk App Key", ""],
        ["KakaoTalk.shareByAppClient", "是否使用客户端分享", ""],
        ["", "", ""],
        ["KakaoStory.appKey", "KakaoStory App Key", ""],
        ["", "", ""],
        ["Alipay.appId", "支付宝App ID", ""],
        ["", "", ""],
        ["AlipayMoments.appId", "支付宝朋友圈：与支付宝相同appId", ""],
        ["", "", ""],
        ["短信", "无需配置，直接可用", "-"],
        ["邮件", "无需配置，直接可用", "-"],
        ["WhatsApp", "无需配置，直接可用", "-"],
        ["复制链接", "无需配置，直接可用", "-"],
    ]
    return create_sheet_with_header(wb, "其他平台", headers, data)


def create_instructions_sheet(wb):
    """创建填写说明 Sheet"""
    headers = ["说明项", "详细内容"]
    data = [
        ["填写步骤", "1. 先在MobTech官网(https://www.mob.com/)注册应用，获取appKey和appSecret\n2. 根据需要的分享平台，前往对应开放平台申请应用（地址见'平台申请地址'Sheet）\n3. 获取各平台的appId/appKey等参数，填写到对应Sheet中\n4. 不需要的平台可以留空，Agent会自动忽略"],
        ["必填项", "基础信息Sheet中的appKey和appSecret是必填项，否则ShareSDK无法正常工作"],
        ["微信配置", "微信、微信朋友圈、微信收藏使用相同的appId和appSecret\n如需分享小程序，需要额外配置userName、path等参数"],
        ["QQ配置", "QQ和QQ空间使用相同的appId和appKey"],
        ["分享类型", "文字/图片分享：所有平台都支持\n链接分享：微信、QQ、微博等支持\n小程序分享：仅微信支持"],
        ["常见问题", "微信分享失败：检查签名MD5是否与微信开放平台配置一致\nQQ分享失败：检查是否在QQ互联配置了正确的包名和签名"],
    ]

    ws = wb.create_sheet(title="填写说明")

    # 设置表头
    header_fill = PatternFill(start_color="70AD47", end_color="70AD47", fill_type="solid")
    header_font = Font(bold=True, color="FFFFFF", size=11)

    for col, header in enumerate(headers, 1):
        cell = ws.cell(row=1, column=col, value=header)
        cell.fill = header_fill
        cell.font = header_font
        cell.alignment = Alignment(horizontal="center", vertical="center")

    # 写入数据
    for row_idx, row_data in enumerate(data, 2):
        for col_idx, value in enumerate(row_data, 1):
            cell = ws.cell(row=row_idx, column=col_idx, value=value)
            cell.alignment = Alignment(vertical="top", wrap_text=True)

    # 设置列宽和行高
    ws.column_dimensions['A'].width = 20
    ws.column_dimensions['B'].width = 80
    for row in range(2, len(data) + 2):
        ws.row_dimensions[row].height = 60

    return ws


def main():
    wb = Workbook()

    # 删除默认创建的 Sheet
    if "Sheet" in wb.sheetnames:
        wb.remove(wb["Sheet"])

    # 按顺序创建各个 Sheet
    create_basic_info_sheet(wb)
    create_wechat_sheet(wb)
    create_qq_sheet(wb)
    create_weibo_sheet(wb)
    create_overseas_sheet(wb)
    create_other_sheet(wb)
    create_platform_urls_sheet(wb)
    create_instructions_sheet(wb)

    # 调整 Sheet 顺序（基础信息放第一个）
    sheets = wb.sheetnames
    target_order = [
        "基础信息",
        "平台申请地址",
        "填写说明",
        "微信系列",
        "QQ系列",
        "微博",
        "海外平台",
        "其他平台",
    ]

    for idx, name in enumerate(target_order):
        if name in sheets:
            wb.move_sheet(name, offset=-wb.sheetnames.index(name) + idx)

    # 保存文件
    output_path = Path(__file__).resolve().parent / "ShareSDK_Config_Template.xlsx"
    wb.save(output_path)
    print(f"Excel 模板已生成: {output_path}")


if __name__ == "__main__":
    main()


path: examples/example-prompts.md
content: # Example Prompts

## 触发集成流程的问法

1. 我要在app中增加分享能力
2. 帮我集成ShareSDK到Android项目
3. 帮我配置微信分享
4. 一键集成 ShareSDK
5. 我要在Android项目中接入分享功能

## 技术咨询类问法

6. android sharesdk 怎么集成？
7. 我想在 Android 项目里接入 Mob 的 ShareSDK，给我完整步骤
8. ShareSDK 的 Gradle 配置怎么写？
9. appKey、appSecret、微信 appId 应该配置在哪里？
10. ShareSDK 隐私合规的 submitPolicyGrantResult 应该什么时候调用？
11. 我是 AGP 8.x，怎么集成 android sharesdk？
12. 我把 build.gradle 发你，你帮我改成能接入 ShareSDK
13. 微信分享失败，帮我按 ShareSDK 集成方式排查


path: templates/SHARESDK_README.md
content: # ShareSDK 集成说明

> 本文档由 Android ShareSDK 集成 Skill 自动生成
> 生成日期：{date}

---

## 项目信息

| 项目 | 内容 |
|------|------|
| 集成日期 | {date} |
| 启用平台 | {platforms_list} |
| 项目路径 | {project_path} |

---

## 配置位置

### SDK 配置

- **文件**：`app/build.gradle`
- **位置**：文件末尾的 `MobSDK { ... }` 配置块
- **可修改项**：
  - `appKey` / `appSecret`：MobTech 应用密钥
  - `devInfo` 块内各平台配置（微信、QQ、微博等）

### 隐私授权

- **文件**：{privacy_file}
- **方法**：{privacy_method}
- **代码**：

```java
// 用户点击隐私政策同意按钮后调用
MobSDK.submitPolicyGrantResult(true);
```

### 分享功能

- **文件**：{share_file}
- **方法**：{share_method}
- **支持平台**：{share_platforms}

---

## 快速修改指南

### 添加新分享平台

1. 在 `app/build.gradle` 的 `devInfo` 块中添加平台配置：

```groovy
MobSDK {
    appKey "your_app_key"
    appSecret "your_app_secret"

    ShareSDK {
        devInfo {
            // 添加新平台，例如抖音
            // Douyin {
            //     appId "your_app_id"
            //     appSecret "your_app_secret"
            // }
        }
    }
}
```

2. 前往对应开放平台申请应用，获取 appId/appSecret
3. 参考官方文档：https://www.mob.com/wiki/detailed?wiki=30&id=14

### 修改分享内容

编辑 `{share_file}` 中的分享参数：

```java
OnekeyShare oks = new OnekeyShare();
oks.setTitle("修改这里：分享标题");
oks.setText("修改这里：分享文本内容");
oks.setUrl("修改这里：分享链接");
oks.setImageUrl("修改这里：分享图片URL");
oks.show(context);
```

### 修改分享平台

在分享代码中指定平台：

```java
// 分享到指定平台（微信）
Platform wechat = ShareSDK.getPlatform("Wechat");

// 分享到指定平台（QQ）
Platform qq = ShareSDK.getPlatform("QQ");

// 分享到指定平台（微博）
Platform weibo = ShareSDK.getPlatform("SinaWeibo");
```

---

## 平台申请地址

| 平台 | 开放平台地址 |
|------|-------------|
| 微信/微信朋友圈/微信收藏 | https://open.weixin.qq.com |
| QQ / QZone | https://connect.qq.com |
| 新浪微博 | https://open.weibo.com |
| Facebook | https://developers.facebook.com |
| Twitter / X | https://developer.twitter.com |
| Instagram | https://developers.instagram.com |
| LinkedIn | https://www.linkedin.com/developers/apps |
| Line | https://developers.line.biz/console/ |
| KakaoTalk / KakaoStory | https://developers.kakao.com/console/app |
| 支付宝 | https://open.alipay.com/platform/home.htm |

---

## 官方资源

- **文档中心**：https://www.mob.com/wiki/list
- **SDK 下载**：https://www.mob.com/download
- **合规指南**：https://www.mob.com/wiki/detailed?wiki=421&id=717
- **技术支持**：https://www.mob.com/about/contact

---

## 常见问题

### 微信分享失败

- 检查签名 MD5 是否与微信开放平台配置一致
- 检查包名是否与微信开放平台配置一致
- 检查 appId/appSecret 是否正确

### QQ 分享失败

- 检查是否在 QQ 互联配置了正确的包名和签名
- 检查 appId/appKey 是否正确

### 微博分享失败

- 检查回调地址是否与微博开放平台配置一致
- 检查 appKey/appSecret 是否正确

---

## 注意事项

1. **隐私合规**：确保 App 有《隐私政策》，首次启动展示并获取用户同意后才调用 `MobSDK.submitPolicyGrantResult(true)`
2. **签名一致**：微信、QQ 等平台需要配置应用签名，确保打包签名与平台配置一致
3. **混淆配置**：如需代码混淆，参考官方文档添加 ShareSDK 的混淆规则


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)