Logo Site EngageLab Mark Colored Transparent文件
搜尋

Android SDK 整合指南

概述

MTVerify Android SDK 是一款手機號碼認證 SDK,提供快速、安全的電信業者等級手機號碼驗證服務。

主要功能

  • SDK 初始化:透過 AppKey 自動取得設定並初始化
  • 覆蓋檢查:檢查目前網路環境是否支援認證服務
  • 號碼認證:發起手機號碼認證,取得認證 Token

系統需求

  • Android 5.0(API 21)及以上
  • 使用者裝置已啟用行動網路

整合指南

權限設定

aar 套件申請了以下權限:

<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/ 目錄下,請在您下載的安裝套件中找到該檔案。

方法列表

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
聯繫銷售