Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Android Smssdk Integration

v1.0.0

Interactive guide for integrating MobTech SMSSDK (短信验证) into Android projects with 6-step workflow. Use when user says "我要在app中增加短信验证", "SMSSDK集成", "Android短...

0· 27· 1 versions· 0 current· 0 all-time· Updated 4h ago· MIT-0

Android SMSSDK (短信验证) 集成 Skill

适用场景

当用户提到以下任一主题时,使用本 skill:

  • android smssdk
  • 短信验证集成
  • 短信验证码
  • 语音验证码
  • SMSSDK SDK 接入
  • 我要在app中增加短信验证
  • 我要在Android项目中接入短信验证码功能
  • 帮我配置短信验证
  • 一键集成 SMSSDK
  • 快速接入短信验证
  • 自动配置 SMSSDK

如果用户问题明确与 Android 的短信验证接入、工程配置、验证码功能、自定义 UI 有关,应优先使用本 skill。


6 步交互式集成工作流

当用户表达集成 SMSSDK 的意图时,执行以下 6 步交互式流程。每步操作前都需要展示内容给用户确认,获得明确同意后再执行。


步骤 1:启动流程

1-1 触发识别

用户可能通过以下方式表达集成意图:

  • "我要在app中增加短信验证"
  • "帮我集成 SMSSDK 到 Android 项目"
  • "配置短信验证"
  • "一键集成短信验证"
  • "Android 短信验证码功能怎么接入"

1-2 询问项目路径

主动询问用户

我来帮你集成 SMSSDK 短信验证功能。

请提供需要集成的 Android 项目根路径,例如:
/Users/xxx/your-android-project

请确保项目包含 app/build.gradle 文件。

1-3 验证路径合法性

验证逻辑

  1. 检查路径是否存在
  2. 检查路径下是否有 app/build.gradlesettings.gradle 文件
  3. 检查是否为有效的 Android 项目结构

如果路径不合法

路径验证失败,可能原因:
- 路径不存在:{path}
- 未找到 app/build.gradle 文件,请确认这是 Android 项目根目录

请重新提供正确的项目路径。

如果路径合法:进入步骤 2


步骤 2:注册 SMSSDK 配置信息

2-1 生成配置模板文件

操作

  1. 在 skill 目录中运行 Python 脚本生成 SMSSDK_Config_Template.xlsx
    python {skill_dir}/assets/generate_excel_template.py
    
  2. 将生成的 SMSSDK_Config_Template.xlsx 复制到用户项目根目录,命名为 SMSSDK_Config.xlsx

告知用户

已在你项目的根目录生成 {path}/SMSSDK_Config.xlsx 配置文件。

请打开该文件,按以下步骤填写:
1. 在"基础信息"Sheet 中填写 MobTech 的 appKey 和 appSecret
   (从 https://www.mob.com/ 注册应用获取)
2. 填写 Android 包名
3. "短信签名审核"Sheet 中填写短信签名信息(企业需审核,个人使用默认【掌淘科技】)
4. "填写说明"Sheet 中有详细说明

⚠️ 重要提醒:
- 短信签名审核通过后才能正常下发短信
- 请前往 MobTech 开发者工作台提交短信签名审核
- 国际短信签名无需审核,直接自行输入英文即可

填写完成后告诉我"填好了",我将继续下一步。

2-2 等待用户填写完成

等待用户回复"填好了"或类似表达。

2-3 读取并验证配置

操作:读取用户项目根目录的 SMSSDK_Config.xlsx 文件

验证规则

检查项规则不通过时的提示
appKey必填,不能为空字符串"基础信息 Sheet 中的 appKey 未填写,请从 MobTech 官网获取"
appSecret必填,不能为空字符串"基础信息 Sheet 中的 appSecret 未填写"
包名必填,格式应为 com.xxx.xxx"包名格式不正确,应为 com.xxx.xxx 格式"

类型转换规则

  • appKeyappSecret包名 等标识符字段:强制转为字符串(加引号)

如果不合法

配置信息验证失败,请修正以下问题:

{具体问题列表}
- 第 1 条:{问题描述}
- 第 2 条:{问题描述}

请修改 Excel 文件后保存,然后重新告诉我"填好了"。

如果合法:提取配置信息,进入步骤 3


步骤 3:完成 SDK 集成

3-1 Gradle 环境配置

根据项目 AGP 版本(通过检查 gradle/wrapper/gradle-wrapper.properties 中的 distributionUrl 判断),选择对应配置方式。

【7.0及以上版本】

文件 1:settings.gradle(AGP 7.0+)

展示内容

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

展示内容

buildscript {
    dependencies {
        // 增加 MobSDK 插件配置
        classpath "com.mob.sdk:MobSDK2:+"
        // 如需集成 FCM,增加以下配置(非必须)
        classpath 'com.google.gms:google-services:4.3.14'
    }
}

7.0以下版本

在项目级 build.gradle 中配置:

allprojects {
    repositories {
        maven { url "https://mvn.mob.com/android" }
    }
}

buildscript {
    repositories {
        maven { url "https://mvn.mob.com/android" }
    }
    dependencies {
        // 增加 MobSDK 插件配置
        classpath "com.mob.sdk:MobSDK2:+"
    }
}
文件 3:gradle.properties

主动询问是否上架googleplay 如果开发者回答:是/YES 则配置

MobSDK.spEdition=GPP

否则(否/NO): 则使用如下配置

MobSDK.spEdition=FP
文件 4:app/build.gradle

生成规则

  1. 类型转换appKeyappSecret 等标识符:强制转为字符串(加引号)

展示内容

// 在文件开头添加插件(根据你的 plugins 块结构选择一种)

// 方式 A
apply plugin: 'com.mob.sdk'

// 方式 B
plugins {
    id 'com.android.application'
    id 'com.mob.sdk'
}

// 在文件末尾添加 MobSDK 配置代码
MobSDK {
    appKey "{用户填写的appKey}"
    appSecret "{用户填写的appSecret}"
    SMSSDK {}
}

询问:"以上是要添加到 app/build.gradle 的内容,是否确认修改?"

3-2 执行 Gradle Sync

说明:修改 build.gradle 后,需要同步 Gradle 配置才能生效:

  • 命令行 ./gradlew:下载依赖、编译代码
  • Android Studio Sync:让 IDE 解析 build.gradle 配置,更新项目结构索引

尝试自动执行

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 面板中的刷新按钮

至此,Gradle集成方式环境搭建已经完成。

进入步骤 4


步骤 4:补充隐私合规

4-1 说明隐私授权

向用户说明

根据工信部合规要求和 MobTech 隐私合规规范,使用 SMSSDK 需要在用户同意《隐私政策》后才能初始化 SDK。

你需要在 App 中:
1. 首次启动时展示《隐私政策》弹窗
2. 用户点击"同意"按钮后,调用隐私授权代码
3. 用户点击"不同意"则不应调用

请告知我:用户点击隐私政策"同意"按钮的回调代码在哪个文件、哪个方法中?
例如:MainActivity.java 的 onPrivacyAgreed() 方法

等待用户告知具体的文件路径和方法名。

展示要插入的代码

// 用户同意隐私政策后调用
MobSDK.submitPolicyGrantResult(true);

完整示例

public void onPrivacyAgreed() {
    // 用户点击同意按钮
    
    // === SMSSDK 隐私授权 ===
    MobSDK.submitPolicyGrantResult(true);
    // ==========================
    
    // 其他业务逻辑...
}

4-2 确认隐私授权代码

询问"以上代码将插入到 {文件} 的 {方法} 中,是否确认?"

4-3 执行插入

用户确认后,将代码插入指定位置。

进入步骤 5


步骤 5:插入短信验证代码

5-1 询问集成方式

说明:SMSSDK 支持两种使用方式:

  1. 自带 UI 页面(快速集成):SDK 提供默认注册页面,一行代码拉起
  2. 自定义集成(灵活定制):自己写 UI,调用 SDK 底层接口

询问"请选择集成方式:\n1. 自带 UI 页面(快速,一行代码拉起默认注册页)\n2. 自定义集成(灵活,自己写 UI + 调用底层接口)\n\n回复 1 或 2。"

5-2 方式一:自带 UI 页面

等待用户告知:要插入代码的文件路径和方法名。

展示要插入的代码

// === SMSSDK 自带 UI 页面 ===
RegisterPage page = new RegisterPage();
page.setTempCode(null); // 未申请模板编号时传 null
page.setRegisterCallback(new EventHandler() {
    @Override
    public void afterEvent(int event, int result, Object data) {
        if (result == SMSSDK.RESULT_COMPLETE) {
            // 成功回调
            if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                // 提交验证码成功
            } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                // 获取验证码成功
            }
        } else {
            // 失败回调
            ((Throwable) data).printStackTrace();
        }
    }
});
page.show(context);
// ==========================

询问"以上代码将插入到 {文件} 的 {方法} 中,是否确认?"

用户确认后,将代码插入指定位置。

5-3 方式二:自定义集成

等待用户告知:要插入代码的文件路径和方法名。

展示要插入的代码

注册 EventHandler

// 注册短信回调(建议在 onCreate 中调用)
EventHandler eh = new EventHandler() {
    @Override
    public void afterEvent(int event, int result, Object data) {
        if (result == SMSSDK.RESULT_COMPLETE) {
            // 成功回调
            if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                // 提交验证码成功
                // TODO 利用验证码进行后续操作
            } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                // 获取验证码成功
                // TODO 提示用户查收短信
            } else if (event == SMSSDK.EVENT_GET_VOICE_VERIFICATION_CODE) {
                // 获取语音验证码成功
            } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                // 返回支持发送验证码的国家列表
            }
        } else {
            // 失败回调
            ((Throwable) data).printStackTrace();
        }
    }
};
SMSSDK.registerEventHandler(eh);

获取验证码

// 请求文本验证码(不带模板编号)
SMSSDK.getVerificationCode("86", "手机号");

// 请求语音验证码(需先发送完文本验证码)
SMSSDK.getVoiceVerifyCode("86", "手机号");

// 提交验证码
SMSSDK.submitVerificationCode("86", "手机号", "验证码");

注销监听(建议在 Activity 的 onDestroy 中调用):

SMSSDK.unregisterEventHandler(eh);

询问"以上代码将插入到 {文件} 的 {方法} 中,是否确认?"

用户确认后,将代码插入指定位置。

进入步骤 6


步骤 6:完成集成

6-1 生成项目级 README

操作:在用户项目根目录生成 SMSSDK_README.md,内容包含集成说明、关键文件位置、后续修改指引。

6-2 完成告知

向用户说明

SMSSDK 集成已完成!

📁 生成的文件:
- {project_path}/SMSSDK_README.md — 集成说明文档

📝 后续修改位置:
- 修改 SDK 配置:app/build.gradle 中的 MobSDK { } 块
- 修改隐私授权位置:{privacy_file} 的 {privacy_method} 方法
- 修改短信回调:{callback_file} 的 {callback_method} 方法

📖 更多帮助:
- 短信验证集成指南:https://mob.com/wiki/detailed?wiki=440&id=23
- SDK API:https://mob.com/wiki/detailed?wiki=440&id=23
- 产品简介:https://mob.com/wiki/detailed?wiki=163&id=23
- 合规指南:https://mob.com/wiki/detailed?wiki=210&id=23
- 服务端验证 API:https://mob.com/wiki/detailed?wiki=112&id=23
- 短信设置:https://mob.com/wiki/detailed?wiki=452&id=23
- 常见问题:https://mob.com/wiki/detailed?wiki=123&id=23

⚠️ 重要提醒:
1. 确保短信签名审核已通过(否则无法正常下发短信)
2. 确保包名与 MobTech 后台配置一致
3. 必须配置《隐私政策》并在用户同意后调用 submitPolicyGrantResult
4. Android 9.0+ 如需 HTTP 请求需配置 usesCleartextTraffic="true"
5. 回调 afterEvent 在子线程,不可直接处理 UI,需传到主线程

附录:技术参考

A. Gradle 配置参考

A.1 Gradle 插件 7.0 及以上

settings.gradle 中:

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 中:

buildscript {
    dependencies {
        classpath "com.mob.sdk:MobSDK2:+"
    }
}

A.2 Gradle 插件 7.0 以下

在项目级 build.gradle 中配置:

allprojects {
    repositories {
        maven { url "https://mvn.mob.com/android" }
    }
}
buildscript {
    repositories {
        maven { url "https://mvn.mob.com/android" }
    }
    dependencies {
        classpath "com.mob.sdk:MobSDK2:+"
    }
}

A.3 应用级启用插件

// 方式 A
apply plugin: 'com.mob.sdk'

// 方式 B
plugins {
    id 'com.android.application'
    id 'com.mob.sdk'
}

A.4 gradle.properties 配置

MobSDK.spEdition=FP  // 上架 Google Play 则改为 GPP

B. 短信 SDK API

B.1 注册回调

EventHandler eh = new EventHandler() {
    @Override
    public void afterEvent(int event, int result, Object data) {
        if (result == SMSSDK.RESULT_COMPLETE) {
            // 成功
        } else {
            // 失败
            ((Throwable) data).printStackTrace();
        }
    }
};
SMSSDK.registerEventHandler(eh);

B.2 获取验证码

// 文本验证码
SMSSDK.getVerificationCode("86", "手机号");

// 带模板编号
SMSSDK.getVerificationCode("模板编号", "86", "手机号");

// 语音验证码(需先发送完文本验证码)
SMSSDK.getVoiceVerifyCode("86", "手机号");

B.3 提交验证码

SMSSDK.submitVerificationCode("86", "手机号", "验证码");

B.4 获取国家列表

SMSSDK.getSupportedCountries();

B.5 注销监听

SMSSDK.unregisterEventHandler(eh);

B.6 本机号码验证(可选)

// 获取 token
SMSSDK.getToken();

// 验证本机号码
SMSSDK.login("手机号", new TokenVerifyResult("opToken", "token", "operator"));

注意:当同时使用秒验(MSSDK)和短信(SMSSDK)时,默认支持本机号验证,不需要不能通过开关打开。仅单独使用短信 SDK 时才需要配置 mobileAuth true


C. 隐私合规要求

必须提醒用户:

  1. App 需要有《隐私政策》
  2. 隐私政策中必须明确说明使用 MobTech 短信验证服务
  3. 首次冷启动展示隐私政策并获取用户同意
  4. 同意后调用 MobSDK.submitPolicyGrantResult(true)
  5. 不同意时不能调用该方法

隐私政策参考条款:

"我们使用了第三方(上海掌之淘信息技术有限公司,以下称"MobTech")MobTech 短信验证服务为您提供短信验证功能。为了顺利实现该功能,您需要授权 MobTech SDK 提供对应的服务;在您授权后,MobTech 将收集您相关的个人信息。"

完整合规指南:https://mob.com/wiki/detailed?wiki=210&id=23


D. 短信签名审核

SMSSDK 需要短信签名才能下发短信。

签名类型要求(自 2025-08-01 起):

  • 公司签名(推荐):与企业营业执照名称完全一致,或简称需包含在营业执照全称中
  • 商标签名:商标需已在中国商标网完成注册
  • 网站/公众号/小程序签名(已不再支持)

个人用户:默认使用【掌淘科技】签名 企业用户:需上传营业执照审核

国际短信签名:无需审核,直接自行输入英文即可。


E. 常见问题排查

问题可能原因
验证码发送失败短信签名未审核通过、包名不一致、网络异常
验证码接收慢运营商通道问题,可尝试语音验证码
Gradle Sync 失败仓库地址配置错误、网络问题
回调在子线程afterEvent 在子线程执行,处理 UI 需传到主线程
服务端验证失败未开启服务端验证开关、IP 未加入白名单

回答边界

  • 仅聚焦 Android SMSSDK 工程集成与合规
  • 不扩展到 iOS、服务端(仅参考服务端验证 API 文档)、非 MobTech SDK
  • 不伪造真实账号、密钥、签名值

Version tags

latestvk9721javjy0ecf7aagv52f6xds85rqe8