iOS SDK 整合指南
概述
MTVerify iOS SDK 是一款手機號碼認證 SDK,提供快速、安全的電信業者等級手機號碼驗證服務。
主要功能
- SDK 初始化:透過 AppKey 自動取得設定並初始化
- 覆蓋檢查:檢查目前網路環境是否支援認證服務
- 號碼認證:發起手機號碼認證,取得認證 Token
系統需求
- iOS 12.0+
- Xcode 14.0+
整合指南
手動整合
- 將
MTVerify.xcframework拖入專案 - 在 Target -> General -> Frameworks, Libraries, and Embedded Content 中:
MTVerify.xcframework:設定為 Do Not Embed
快速開始
Swift 範例
import MTVerify
// 1. 開啟除錯模式(可選,建議在開發階段開啟)
MTVerifySDK.setDebug(true)
// 2. 初始化 SDK
MTVerifySDK.setup(appKey: "your_app_key", environment: .production) { result in
if result.isSuccess {
print("SDK 初始化成功")
} else {
print("SDK 初始化失敗: \(result.message)")
}
}
// 3. 檢查覆蓋
MTVerifySDK.checkCoverage(phoneNumber: "6281234567890") { result in
if result.isSuccess && result.isAvailable {
print("認證服務可用,電信業者: \(result.operatorCode ?? "")")
}
}
// 4. 發起認證
MTVerifySDK.startAuthentication(phoneNumber: "6281234567890") { result in
if result.isSuccess {
print("認證成功,Token: \(result.token ?? "")")
}
}
import MTVerify
// 1. 開啟除錯模式(可選,建議在開發階段開啟)
MTVerifySDK.setDebug(true)
// 2. 初始化 SDK
MTVerifySDK.setup(appKey: "your_app_key", environment: .production) { result in
if result.isSuccess {
print("SDK 初始化成功")
} else {
print("SDK 初始化失敗: \(result.message)")
}
}
// 3. 檢查覆蓋
MTVerifySDK.checkCoverage(phoneNumber: "6281234567890") { result in
if result.isSuccess && result.isAvailable {
print("認證服務可用,電信業者: \(result.operatorCode ?? "")")
}
}
// 4. 發起認證
MTVerifySDK.startAuthentication(phoneNumber: "6281234567890") { result in
if result.isSuccess {
print("認證成功,Token: \(result.token ?? "")")
}
}
此代碼塊在浮窗中顯示
Objective-C 範例
@import MTVerify;
// 1. 開啟除錯模式(可選)
[MTVerifySDK setDebug:YES];
// 2. 初始化 SDK
[MTVerifySDK setupWithAppKey:@"your_app_key"
environment:MTEnvironmentProduction
completion:^(MTSetupResult *result) {
if (result.isSuccess) {
NSLog(@"SDK 初始化成功");
} else {
NSLog(@"SDK 初始化失敗: %@", result.message);
}
}];
// 3. 檢查覆蓋
[MTVerifySDK checkCoverageWithPhoneNumber:@"6281234567890"
completion:^(MTCoverageResult *result) {
if (result.isSuccess && result.isAvailable) {
NSLog(@"認證服務可用,電信業者: %@", result.operatorCode);
}
}];
// 4. 發起認證
[MTVerifySDK startAuthenticationWithPhoneNumber:@"6281234567890"
completion:^(MTAuthResult *result) {
if (result.isSuccess) {
NSLog(@"認證成功,Token: %@", result.token);
}
}];
@import MTVerify;
// 1. 開啟除錯模式(可選)
[MTVerifySDK setDebug:YES];
// 2. 初始化 SDK
[MTVerifySDK setupWithAppKey:@"your_app_key"
environment:MTEnvironmentProduction
completion:^(MTSetupResult *result) {
if (result.isSuccess) {
NSLog(@"SDK 初始化成功");
} else {
NSLog(@"SDK 初始化失敗: %@", result.message);
}
}];
// 3. 檢查覆蓋
[MTVerifySDK checkCoverageWithPhoneNumber:@"6281234567890"
completion:^(MTCoverageResult *result) {
if (result.isSuccess && result.isAvailable) {
NSLog(@"認證服務可用,電信業者: %@", result.operatorCode);
}
}];
// 4. 發起認證
[MTVerifySDK startAuthenticationWithPhoneNumber:@"6281234567890"
completion:^(MTAuthResult *result) {
if (result.isSuccess) {
NSLog(@"認證成功,Token: %@", result.token);
}
}];
此代碼塊在浮窗中顯示
API 參考
MTVerifySDK 類別
MTVerifySDK 是 SDK 的核心類別,提供所有認證相關功能。
屬性
| 屬性 | 類型 | 描述 |
|---|---|---|
version |
String |
SDK 版本號(唯讀,類別屬性) |
isInitialized |
Bool |
SDK 是否已初始化(唯讀,類別屬性) |
方法
setDebug(_:)
設定除錯模式,開啟後會輸出詳細日誌。
static func setDebug(_ enabled: Bool)
static func setDebug(_ enabled: Bool)
此代碼塊在浮窗中顯示
參數
| 參數 | 類型 | 描述 |
|---|---|---|
enabled |
Bool |
是否開啟除錯模式 |
說明
- 建議在開發與測試階段開啟
- 發布版本建議關閉
isDebug()
取得目前除錯模式狀態。
static func isDebug() -> Bool
static func isDebug() -> Bool
此代碼塊在浮窗中顯示
回傳值
Bool - 是否開啟除錯模式
setup(appKey:environment:completion:)
初始化 SDK。使用 AppKey 自動從伺服器取得設定並完成初始化。
static func setup(appKey: String,
environment: MTEnvironment = .production,
completion: @escaping (MTSetupResult) -> Void)
static func setup(appKey: String,
environment: MTEnvironment = .production,
completion: @escaping (MTSetupResult) -> Void)
此代碼塊在浮窗中顯示
參數
| 參數 | 類型 | 描述 |
|---|---|---|
appKey |
String |
應用程式 AppKey,從主控台取得 |
environment |
MTEnvironment |
執行環境,預設為 .production |
completion |
(MTSetupResult) -> Void |
初始化完成回呼 |
注意事項
- 必須在呼叫其他 API 之前完成初始化
- 初始化為非同步操作,請在回呼中確認是否成功
- 建議在
AppDelegate或應用程式啟動時呼叫
checkCoverage(phoneNumber:completion:)
檢查目前網路環境是否支援認證服務。
static func checkCoverage(phoneNumber: String,
completion: @escaping (MTCoverageResult) -> Void)
static func checkCoverage(phoneNumber: String,
completion: @escaping (MTCoverageResult) -> Void)
此代碼塊在浮窗中顯示
參數
| 參數 | 類型 | 描述 |
|---|---|---|
phoneNumber |
String |
手機號碼(國碼+手機號碼) |
completion |
(MTCoverageResult) -> Void |
檢查完成回呼 |
回傳結果
透過 MTCoverageResult 物件回傳:
isAvailable:是否支援認證operatorCode:電信業者代碼,忽略該欄位,預設回傳空值
注意事項
- 呼叫前請確保 SDK 已初始化
- 建議在發起認證前先呼叫此方法檢查覆蓋
startAuthentication(phoneNumber:completion:)
發起手機號碼認證。
static func startAuthentication(phoneNumber: String,
completion: @escaping (MTAuthResult) -> Void)
static func startAuthentication(phoneNumber: String,
completion: @escaping (MTAuthResult) -> Void)
此代碼塊在浮窗中顯示
參數
| 參數 | 類型 | 描述 |
|---|---|---|
phoneNumber |
String |
手機號碼(國碼+手機號碼) |
completion |
(MTAuthResult) -> Void |
認證完成回呼 |
回傳結果
透過 MTAuthResult 物件回傳:
token:認證 Token,用於後端驗證
注意事項
- 呼叫前請確保 SDK 已初始化
- 需要在行動網路環境下使用
- 取得的 Token 需要傳給後端進行二次驗證
列舉類型
MTEnvironment
SDK 執行環境列舉。
@objc public enum MTEnvironment: Int {
case sandbox = 0 // 沙箱環境(測試)
case production = 1 // 正式環境
}
@objc public enum MTEnvironment: Int {
case sandbox = 0 // 沙箱環境(測試)
case production = 1 // 正式環境
}
此代碼塊在浮窗中顯示
| 值 | 描述 |
|---|---|
.sandbox |
沙箱測試環境 |
.production |
正式環境 |
結果類型
MTSetupResult
初始化結果類別。
@objcMembers
public class MTSetupResult: NSObject {
/// 結果代碼(0 為成功,其他為失敗)
public let code: Int
/// 描述資訊
public let message: String
/// 是否成功
public var isSuccess: Bool { return code == 0 }
}
@objcMembers
public class MTSetupResult: NSObject {
/// 結果代碼(0 為成功,其他為失敗)
public let code: Int
/// 描述資訊
public let message: String
/// 是否成功
public var isSuccess: Bool { return code == 0 }
}
此代碼塊在浮窗中顯示
| 屬性 | 類型 | 描述 |
|---|---|---|
code |
Int |
結果代碼,0 表示成功 |
message |
String |
描述資訊 |
isSuccess |
Bool |
是否成功(計算屬性) |
MTCoverageResult
覆蓋檢查結果類別。
@objcMembers
public class MTCoverageResult: NSObject {
/// 結果代碼(0 為成功,其他為失敗)
public let code: Int
/// 描述資訊
public let message: String
/// 是否可用
public let isAvailable: Bool
/// 電信業者代碼
public let operatorCode: String?
/// 是否成功
public var isSuccess: Bool { return code == 0 }
}
@objcMembers
public class MTCoverageResult: NSObject {
/// 結果代碼(0 為成功,其他為失敗)
public let code: Int
/// 描述資訊
public let message: String
/// 是否可用
public let isAvailable: Bool
/// 電信業者代碼
public let operatorCode: String?
/// 是否成功
public var isSuccess: Bool { return code == 0 }
}
此代碼塊在浮窗中顯示
| 屬性 | 類型 | 描述 |
|---|---|---|
code |
Int |
結果代碼,0 表示成功 |
message |
String |
描述資訊 |
isAvailable |
Bool |
目前環境是否支援認證 |
operatorCode |
String? |
電信業者代碼(如 "TELKOMSEL"),忽略該欄位,預設回傳空值 |
isSuccess |
Bool |
是否成功(計算屬性) |
MTAuthResult
認證結果類別。
@objcMembers
public class MTAuthResult: NSObject {
/// 結果代碼(0 為成功,其他為失敗)
public let code: Int
/// 描述資訊
public let message: String
/// 認證 Token(用於後端驗證)
public let token: String?
/// 是否成功
public var isSuccess: Bool { return code == 0 }
}
@objcMembers
public class MTAuthResult: NSObject {
/// 結果代碼(0 為成功,其他為失敗)
public let code: Int
/// 描述資訊
public let message: String
/// 認證 Token(用於後端驗證)
public let token: String?
/// 是否成功
public var isSuccess: Bool { return code == 0 }
}
此代碼塊在浮窗中顯示
| 屬性 | 類型 | 描述 |
|---|---|---|
code |
Int |
結果代碼,0 表示成功 |
message |
String |
描述資訊 |
token |
String? |
認證 Token,用於後端二次驗證 |
isSuccess |
Bool |
是否成功(計算屬性) |
完整範例
完整的 Swift 整合範例
import UIKit
import MTVerify
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 開啟除錯模式
MTVerifySDK.setDebug(true)
// 初始化 SDK
initializeSDK()
}
// MARK: - SDK 初始化
private func initializeSDK() {
MTVerifySDK.setup(
appKey: "your_app_key",
environment: .production
) { [weak self] result in
if result.isSuccess {
print("✅ SDK 初始化成功")
print("SDK 版本: \(MTVerifySDK.version)")
print("是否已初始化: \(MTVerifySDK.isInitialized)")
} else {
print("❌ SDK 初始化失敗: \(result.message) (code: \(result.code))")
}
}
}
// MARK: - 檢查覆蓋
func checkCoverage(phoneNumber: String) {
// 檢查 SDK 是否已初始化
guard MTVerifySDK.isInitialized else {
print("⚠️ SDK 未初始化")
return
}
MTVerifySDK.checkCoverage(phoneNumber: phoneNumber) { result in
if result.isSuccess {
if result.isAvailable {
print("✅ 服務可用")
print("電信業者: \(result.operatorCode ?? "未知")")
} else {
print("⚠️ 目前環境不支援認證服務")
}
} else {
print("❌ 檢查失敗: \(result.message) (code: \(result.code))")
}
}
}
// MARK: - 發起認證
func authenticate(phoneNumber: String) {
// 檢查 SDK 是否已初始化
guard MTVerifySDK.isInitialized else {
print("⚠️ SDK 未初始化")
return
}
MTVerifySDK.startAuthentication(phoneNumber: phoneNumber) { result in
if result.isSuccess {
print("✅ 認證成功")
print("Token: \(result.token ?? "")")
// TODO: 將 token 傳送到後端進行驗證
self.verifyTokenOnServer(token: result.token ?? "")
} else {
print("❌ 認證失敗: \(result.message) (code: \(result.code))")
}
}
}
// MARK: - 後端驗證
private func verifyTokenOnServer(token: String) {
// 將 token 傳送到您的後端伺服器進行驗證
// 後端使用 token 呼叫 MTVerify 伺服器 API 驗證手機號碼
}
}
import UIKit
import MTVerify
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 開啟除錯模式
MTVerifySDK.setDebug(true)
// 初始化 SDK
initializeSDK()
}
// MARK: - SDK 初始化
private func initializeSDK() {
MTVerifySDK.setup(
appKey: "your_app_key",
environment: .production
) { [weak self] result in
if result.isSuccess {
print("✅ SDK 初始化成功")
print("SDK 版本: \(MTVerifySDK.version)")
print("是否已初始化: \(MTVerifySDK.isInitialized)")
} else {
print("❌ SDK 初始化失敗: \(result.message) (code: \(result.code))")
}
}
}
// MARK: - 檢查覆蓋
func checkCoverage(phoneNumber: String) {
// 檢查 SDK 是否已初始化
guard MTVerifySDK.isInitialized else {
print("⚠️ SDK 未初始化")
return
}
MTVerifySDK.checkCoverage(phoneNumber: phoneNumber) { result in
if result.isSuccess {
if result.isAvailable {
print("✅ 服務可用")
print("電信業者: \(result.operatorCode ?? "未知")")
} else {
print("⚠️ 目前環境不支援認證服務")
}
} else {
print("❌ 檢查失敗: \(result.message) (code: \(result.code))")
}
}
}
// MARK: - 發起認證
func authenticate(phoneNumber: String) {
// 檢查 SDK 是否已初始化
guard MTVerifySDK.isInitialized else {
print("⚠️ SDK 未初始化")
return
}
MTVerifySDK.startAuthentication(phoneNumber: phoneNumber) { result in
if result.isSuccess {
print("✅ 認證成功")
print("Token: \(result.token ?? "")")
// TODO: 將 token 傳送到後端進行驗證
self.verifyTokenOnServer(token: result.token ?? "")
} else {
print("❌ 認證失敗: \(result.message) (code: \(result.code))")
}
}
}
// MARK: - 後端驗證
private func verifyTokenOnServer(token: String) {
// 將 token 傳送到您的後端伺服器進行驗證
// 後端使用 token 呼叫 MTVerify 伺服器 API 驗證手機號碼
}
}
此代碼塊在浮窗中顯示
版本資訊
- SDK 版本:1.0.1










