Android SDK 集成指南
概述
MTVerify Android SDK 是一款手机号码认证 SDK,提供快速、安全的运营商级别手机号验证服务。
主要功能
- SDK 初始化:通过 AppKey 自动获取配置并初始化
- 覆盖检查:检查当前网络环境是否支持认证服务
- 号码认证:发起手机号码认证,获取认证 Token
系统要求
- Android 5.0 (API 21) 及以上
- 用户设备已启用移动网络
集成指南
权限配置
arr包申请了以下权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
此代码块在浮窗中显示
运营商配置
由于运营商接口需要使用 HTTP 明文传输,需要在应用的 AndroidManifest.xml 中配置网络安全策略:
<application
android:networkSecurityConfig="@xml/mtverify_network_security_config"
...>
...
</application>
<application
android:networkSecurityConfig="@xml/mtverify_network_security_config"
...>
...
</application>
此代码块在浮窗中显示
同时需要将 mtverify_network_security_config.xml 文件复制到应用的 res/xml/ 目录下,请在您下载的安装包中找到该文件。
API 参考
概述
MTVerifyApi 是 MTVerify SDK 的主要入口类,提供了手机号码验证相关的所有功能。
方法列表
- setLogEnable - 设置日志开关
- init - 初始化 SDK
- checkCoverage - 检查覆盖范围
- startAuthentication - 执行认证
init
初始化 MTVerify SDK,设置应用密钥和环境配置。
方法签名
@JvmStatic
fun init(
context: Context,
appkey: String,
environment: IPEnvironment = IPEnvironment.PRODUCTION,
callback: InitCallback? = null
)
@JvmStatic
fun init(
context: Context,
appkey: String,
environment: IPEnvironment = IPEnvironment.PRODUCTION,
callback: InitCallback? = null
)
此代码块在浮窗中显示
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| context | Context | 是 | Android 上下文对象 |
| appkey | String | 是 | 应用密钥,用于标识应用 |
| environment | IPEnvironment | 否 | 环境类型,默认为 SANDBOX 可选值: - IPEnvironment.SANDBOX:测试/沙箱环境 - IPEnvironment.PRODUCTION:生产环境 |
| callback | InitCallback? | 否 | 初始化回调接口,用于接收初始化结果 |
返回值
无
回调结果
通过 InitCallback.onComplete(result: InitResult) 返回初始化结果:
data class InitResult(
val code: Int, // 状态码,0 代表成功,其他数字代表失败
val message: String? // 消息(成功或错误信息)
)
data class InitResult(
val code: Int, // 状态码,0 代表成功,其他数字代表失败
val message: String? // 消息(成功或错误信息)
)
此代码块在浮窗中显示
使用示例
MTVerifyApi.init(
context = this,
appkey = "your_app_key",
environment = IPEnvironment.PRODUCTION,
callback = object : InitCallback {
override fun onComplete(result: InitResult) {
if (result.code == 0) {
// 初始化成功
Log.d("MTVerify", "初始化成功: ${result.message}")
} else {
// 初始化失败
Log.e("MTVerify", "初始化失败: ${result.message}")
}
}
}
)
MTVerifyApi.init(
context = this,
appkey = "your_app_key",
environment = IPEnvironment.PRODUCTION,
callback = object : InitCallback {
override fun onComplete(result: InitResult) {
if (result.code == 0) {
// 初始化成功
Log.d("MTVerify", "初始化成功: ${result.message}")
} else {
// 初始化失败
Log.e("MTVerify", "初始化失败: ${result.message}")
}
}
}
)
此代码块在浮窗中显示
注意事项
- 必须先调用
init()方法初始化 SDK,才能使用其他功能 - 初始化过程会通过 HTTP 请求获取
clientId和redirectUrl,需要网络连接
setLogEnable
设置日志开关,控制 SDK 的日志输出。
方法签名
@JvmStatic
fun setLogEnable(enable: Boolean)
@JvmStatic
fun setLogEnable(enable: Boolean)
此代码块在浮窗中显示
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| enable | Boolean | 是 | true 表示启用日志,false 表示禁用所有日志输出 |
使用示例
// 启用日志
MTVerifyApi.setLogEnable(true)
// 禁用日志
MTVerifyApi.setLogEnable(false)
// 启用日志
MTVerifyApi.setLogEnable(true)
// 禁用日志
MTVerifyApi.setLogEnable(false)
此代码块在浮窗中显示
checkCoverage
检查指定手机号码是否支持 IPification 验证服务。
方法签名
@JvmStatic
fun checkCoverage(
context: Context,
phoneNumber: String,
callback: CoverageCallback? = null
)
@JvmStatic
fun checkCoverage(
context: Context,
phoneNumber: String,
callback: CoverageCallback? = null
)
此代码块在浮窗中显示
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| context | Context | 是 | Android 上下文对象 |
| phoneNumber | String | 是 | 国家码+用户手机号码 |
| callback | CoverageCallback? | 否 | 覆盖范围检查回调接口 |
返回值
无
回调结果
通过 CoverageCallback.onComplete(result: CoverageResult) 返回检查结果:
data class CoverageResult(
val code: Int, // 状态码,0 代表成功,其他数字代表失败
val isAvailable: Boolean, // 是否可用(支持的运营商)
val operatorCode: String?, // 运营商代码
val message: String? // 消息(成功或错误信息)
)
data class CoverageResult(
val code: Int, // 状态码,0 代表成功,其他数字代表失败
val isAvailable: Boolean, // 是否可用(支持的运营商)
val operatorCode: String?, // 运营商代码
val message: String? // 消息(成功或错误信息)
)
此代码块在浮窗中显示
使用示例
MTVerifyApi.checkCoverage(
context = this,
phoneNumber = "6281234567890",
callback = object : CoverageCallback {
override fun onComplete(result: CoverageResult) {
if (result.code == 0) {
if (result.isAvailable) {
// 支持该服务
Log.d("MTVerify", "运营商支持: ${result.operatorCode}")
} else {
// 不支持该服务
Log.d("MTVerify", "运营商不支持")
}
} else {
// 检查失败
Log.e("MTVerify", "检查失败: ${result.message}")
}
}
}
)
MTVerifyApi.checkCoverage(
context = this,
phoneNumber = "6281234567890",
callback = object : CoverageCallback {
override fun onComplete(result: CoverageResult) {
if (result.code == 0) {
if (result.isAvailable) {
// 支持该服务
Log.d("MTVerify", "运营商支持: ${result.operatorCode}")
} else {
// 不支持该服务
Log.d("MTVerify", "运营商不支持")
}
} else {
// 检查失败
Log.e("MTVerify", "检查失败: ${result.message}")
}
}
}
)
此代码块在浮窗中显示
startAuthentication
启动手机号码认证流程。
方法签名
@JvmStatic
fun startAuthentication(
activity: Activity,
countryCode: String,
phoneNumber: String,
callback: AuthenticationCallback? = null
)
@JvmStatic
fun startAuthentication(
activity: Activity,
countryCode: String,
phoneNumber: String,
callback: AuthenticationCallback? = null
)
此代码块在浮窗中显示
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| activity | Activity | 是 | Android Activity 对象,用于显示认证界面 |
| countryCode | String | 是 | 国家代码 |
| phoneNumber | String | 是 | 用户手机号码(不含国家代码) |
| callback | AuthenticationCallback? | 否 | 认证回调接口 |
返回值
无
回调结果
通过 AuthenticationCallback.onComplete(result: AuthenticationResult) 返回认证结果:
data class AuthenticationResult(
val code: Int, // 状态码,0 代表成功,-1 代表失败,-2 代表用户取消
val token: String?, // 加密后的认证数据(包含 code 的 JSON 字符串,经过 AES 加密)
val message: String? // 消息(成功或错误信息)
)
data class AuthenticationResult(
val code: Int, // 状态码,0 代表成功,-1 代表失败,-2 代表用户取消
val token: String?, // 加密后的认证数据(包含 code 的 JSON 字符串,经过 AES 加密)
val message: String? // 消息(成功或错误信息)
)
此代码块在浮窗中显示
注意:token 是加密后的 JSON 字符串,格式如下:
{
"version": "1",
"content": {
"code": "认证码",
"state": "状态参数",
"appkey": "应用密钥"
}
}
{
"version": "1",
"content": {
"code": "认证码",
"state": "状态参数",
"appkey": "应用密钥"
}
}
此代码块在浮窗中显示
使用示例
MTVerifyApi.startAuthentication(
activity = this,
countryCode = "62",
phoneNumber = "81234567890",
callback = object : AuthenticationCallback {
override fun onComplete(result: AuthenticationResult) {
when (result.code) {
0 -> {
// 认证成功
val token = result.token
// token 用于置换结果
Log.d("MTVerify", "认证成功: $token")
}
-1 -> {
// 认证失败
Log.e("MTVerify", "认证失败: ${result.message}")
}
-2 -> {
// 用户取消
Log.d("MTVerify", "用户取消认证")
}
}
}
}
)
MTVerifyApi.startAuthentication(
activity = this,
countryCode = "62",
phoneNumber = "81234567890",
callback = object : AuthenticationCallback {
override fun onComplete(result: AuthenticationResult) {
when (result.code) {
0 -> {
// 认证成功
val token = result.token
// token 用于置换结果
Log.d("MTVerify", "认证成功: $token")
}
-1 -> {
// 认证失败
Log.e("MTVerify", "认证失败: ${result.message}")
}
-2 -> {
// 用户取消
Log.d("MTVerify", "用户取消认证")
}
}
}
}
)
此代码块在浮窗中显示
数据模型
IPEnvironment
环境类型枚举:
enum class IPEnvironment {
SANDBOX, // 测试/沙箱环境
PRODUCTION // 生产环境
}
enum class IPEnvironment {
SANDBOX, // 测试/沙箱环境
PRODUCTION // 生产环境
}
此代码块在浮窗中显示
InitResult
初始化结果:
data class InitResult(
val code: Int, // 状态码,0 代表成功
val message: String? // 消息
)
data class InitResult(
val code: Int, // 状态码,0 代表成功
val message: String? // 消息
)
此代码块在浮窗中显示
CoverageResult
覆盖范围检查结果:
data class CoverageResult(
val code: Int, // 状态码,0 代表成功
val isAvailable: Boolean, // 是否可用
val operatorCode: String?, // 运营商代码
val message: String? // 消息
)
data class CoverageResult(
val code: Int, // 状态码,0 代表成功
val isAvailable: Boolean, // 是否可用
val operatorCode: String?, // 运营商代码
val message: String? // 消息
)
此代码块在浮窗中显示
AuthenticationResult
认证结果:
data class AuthenticationResult(
val code: Int, // 状态码,0 代表成功,-1 代表失败,-2 代表用户取消
val token: String?, // 加密后的认证 token
val message: String? // 消息
)
data class AuthenticationResult(
val code: Int, // 状态码,0 代表成功,-1 代表失败,-2 代表用户取消
val token: String?, // 加密后的认证 token
val message: String? // 消息
)
此代码块在浮窗中显示
回调接口
InitCallback
初始化回调接口:
interface InitCallback {
fun onComplete(result: InitResult)
}
interface InitCallback {
fun onComplete(result: InitResult)
}
此代码块在浮窗中显示
CoverageCallback
覆盖范围检查回调接口:
interface CoverageCallback {
fun onComplete(result: CoverageResult)
}
interface CoverageCallback {
fun onComplete(result: CoverageResult)
}
此代码块在浮窗中显示
AuthenticationCallback
认证回调接口:
interface AuthenticationCallback {
fun onComplete(result: AuthenticationResult)
}
interface AuthenticationCallback {
fun onComplete(result: AuthenticationResult)
}
此代码块在浮窗中显示
完整示例
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 1. 启用日志(可选)
MTVerifyApi.setLogEnable(true)
// 2. 初始化 SDK
MTVerifyApi.init(
context = this,
appkey = "your_app_key",
environment = IPEnvironment.SANDBOX,
callback = object : InitCallback {
override fun onComplete(result: InitResult) {
if (result.code == 0) {
// 初始化成功,可以开始使用其他功能
checkCoverage()
}
}
}
)
}
private fun checkCoverage() {
// 3. 检查覆盖范围
MTVerifyApi.checkCoverage(
context = this,
phoneNumber = "6281234567890",
callback = object : CoverageCallback {
override fun onComplete(result: CoverageResult) {
if (result.isAvailable) {
// 4. 如果支持,执行认证
startAuthentication()
}
}
}
)
}
private fun startAuthentication() {
// 5. 执行认证
MTVerifyApi.startAuthentication(
activity = this,
countryCode = "62",
phoneNumber = "81234567890",
callback = object : AuthenticationCallback {
override fun onComplete(result: AuthenticationResult) {
if (result.code == 0) {
// 认证成功,处理 token
handleToken(result.token)
}
}
}
)
}
private fun handleToken(token: String?) {
// 请求API处理置换后的 token
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 1. 启用日志(可选)
MTVerifyApi.setLogEnable(true)
// 2. 初始化 SDK
MTVerifyApi.init(
context = this,
appkey = "your_app_key",
environment = IPEnvironment.SANDBOX,
callback = object : InitCallback {
override fun onComplete(result: InitResult) {
if (result.code == 0) {
// 初始化成功,可以开始使用其他功能
checkCoverage()
}
}
}
)
}
private fun checkCoverage() {
// 3. 检查覆盖范围
MTVerifyApi.checkCoverage(
context = this,
phoneNumber = "6281234567890",
callback = object : CoverageCallback {
override fun onComplete(result: CoverageResult) {
if (result.isAvailable) {
// 4. 如果支持,执行认证
startAuthentication()
}
}
}
)
}
private fun startAuthentication() {
// 5. 执行认证
MTVerifyApi.startAuthentication(
activity = this,
countryCode = "62",
phoneNumber = "81234567890",
callback = object : AuthenticationCallback {
override fun onComplete(result: AuthenticationResult) {
if (result.code == 0) {
// 认证成功,处理 token
handleToken(result.token)
}
}
}
)
}
private fun handleToken(token: String?) {
// 请求API处理置换后的 token
}
}
此代码块在浮窗中显示
注意事项
- 初始化顺序:必须先调用
init()方法初始化 SDK,才能使用其他功能。 - 线程安全:所有 API 方法都可以在主线程中调用,回调也会在主线程中执行。
- 权限要求:确保应用已申请必要的网络权限。
- Token 解密:认证成功后返回的 token 是加密的,需要使用相应的解密方法处理。
- 日志控制:建议在生产环境中禁用日志输出,以提高性能和安全性。
版本信息
- SDK 版本:1.0.1










