Logo Site EngageLab Mark Colored Transparent文档
搜索

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 的主要入口类,提供了手机号码验证相关的所有功能。

方法列表

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 请求获取 clientIdredirectUrl,需要网络连接

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
        
    }
}

            
此代码块在浮窗中显示

注意事项

  1. 初始化顺序:必须先调用 init() 方法初始化 SDK,才能使用其他功能。
  2. 线程安全:所有 API 方法都可以在主线程中调用,回调也会在主线程中执行。
  3. 权限要求:确保应用已申请必要的网络权限。
  4. Token 解密:认证成功后返回的 token 是加密的,需要使用相应的解密方法处理。
  5. 日志控制:建议在生产环境中禁用日志输出,以提高性能和安全性。

版本信息

  • SDK 版本:1.0.1
Icon Solid Transparent White Qiyu
联系销售