Nhảy tới nội dung

iOS

cẩn thận

Yêu cầu iOS >= 13.0

Bước 1: Tải SDK và cấu hình Project

Lưu ý

Ứng dụng viết bằng Flutter hoặc tích hợp Flutter module chỉ kéo thả file ở thư mục eContract-eKYC

  • Bổ sung quyền truy cập Camera, FaceID trong Info.plist
    <key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) requires access to your phone’s camera</string>

<key>NSFaceIDUsageDescription</key>
<string>$(PRODUCT_NAME) Authentication with TouchId or FaceID</string>

Bước 2: Khởi tạo SDK tại nơi bắt đầu kết nối

  • Code tại AppDelegate hoặc Controller muốn kết nối
// import thư viện
import SmartCASDK

class ViewController: UIViewController {
//Khai báo biến
var vnptSmartCASDK: VNPTSmartCASDK?

// Khởi tạo SDK
override func viewDidLoad() {
super.viewDidLoad()

let customParams = CustomParams(
customerId: "", // Số CCCD, giấy tờ của KH đăng nhập SDK và không cho sửa, để trống KH tự nhập
borderRadiusBtn: 0, // Border radius của button
colorSecondBtn: "", // Màu background nút phụ ví dụ: #FFFFFF
colorPrimaryBtn: "", // Màu background nút chính ví dụ: #4788FF
featuresLink: "", // Đường dẫn tới trang hướng dẫn sử dụng các tính năng sdk
customerPhone: "", // Số ĐT của KH
customerEmail: "", // Email của KH
packageDefault: "", // Gói mặc định hiển thị khi mua Chứng thư số
password: "", // Mật khẩu mặc định khi tạo tài khoản
logoCustom: "", // Logo của đối tác theo mã hoá Base64 dạng "iVBORw0KGgoAAAANSUhEUgAAANgAAA......"
backgroundLogin: "" // Background của đối tác theo mã hoá Base64 dạng "iVBORw0KGgoAAAANSUhEUgAAANgAAA......"
)
let config = SDKConfig(
clientId: "", // clientId tương ứng với môi trường được cấp qua email
clientSecret: "", // clientSecret tương ứng với môi trường được cấp qua email
environment: ENVIRONMENT.DEMO, // Môi trường kết nối DEMO/PRODUCTION
lang: LANG.VI, // Ngôn ngữ vi/en
isFlutterApp: false, // true nếu ứng dụng phát triển bằng Flutter, hoặc tích hợp Flutter module
customParams: customParams
)

self.vnptSmartCASDK = VNPTSmartCASDK(viewController: self, config: config)
GeneratedPluginRegistrant.register(with: self.vnptSmartCASDK?.flutterEngine as! FlutterPluginRegistry);
// ... Code khác của project
}
}

Bước 3: Sử dụng các hàm chính

📦 Quản lý tài khoản (getMainInfo)

@objc func getMainInfo() {
self.vnptSmartCASDK?.getMainInfo(callback: { result in
if result.status == SmartCAResultCode.SUCCESS_CODE {
// Xử lý khi thành công
} else {
// Xử lý khi có lỗi
print("Thông tin lỗi: \(result.status) - \(result.statusDesc) - \(result.data)")
}
})
}

📦 Lấy thông tin người dùng, chứng thư số (getAuthentication)

@objc func getAuthentication() {
self.vnptSmartCASDK?.getAuthentication(callback: { authResult in
if authResult.status == SmartCAResultCode.SUCCESS_CODE {
// Xử lý khi thành công
self.showDialog(title: "Đã kích hoạt thành công", message: "\(authResult.data)")
// SDK trả lại token, credential, serial của khách hàng
guard let data = self.getJsonFromString(str: authResult.data) else { return }
self.accessToken = data["accessToken"] as? String ?? ""
self.credentialId = data["credentialId"] as? String ?? ""
self.serial = data["serial"] as? String ?? ""

// tạo giao dịch từ phía backend để lấy tranId
// sau đó gọi getWaitingTransaction
} else {
// Xử lý khi có lỗi
print("Thông tin lỗi: \(result.status) - \(result.statusDesc) - \(result.data)")
}
})
}

📦 Xác nhận giao dịch ký số (getWaitingTransaction)

  • Sau khi lấy lấy được tranId từ phía backend đối tác gọi hàm này để người dùng Xác nhận / Huỷ giao dịch ký số.
  • Luôn phải gọi hàm getAuthentication trước
@objc func getWaitingTransaction() {
var tranId = "xxxxxxx" // tạo giao dịch từ backend, lấy tranId từ hệ thống VNPT SmartCA trả về

self.vnptSmartCASDK?.getWaitingTransaction(tranId: tranId, callback: { result in
if result.status == SmartCAResultCode.SUCCESS_CODE {
// Xử lý khi thành công
print("Giao dịch thành công: \(result.status) - \(result.statusDesc) - \(result.data)")
} else {
// Xử lý khi có lỗi
print("Thông tin lỗi: \(result.status) - \(result.statusDesc) - \(result.data)")
}
})
}

📦 Tạo tài khoản/Kích hoạt tài khoản (createAccount)

  • Mở trực tiếp màn hình tới màn hình tạo tài khoản.
@objc func createAccount() {
self.vnptSmartCASDK?.createAccount(callback: { result in
if result.status == SmartCAResultCode.SUCCESS_CODE {
// Xử lý khi thành công
} else {
// Xử lý khi có lỗi
print("Thông tin lỗi: \(result.status) - \(result.statusDesc) - \(result.data)")
}
})
}

📦 Đăng xuất (signOut)

  • Đăng xuất tài khoản đang đăng nhập vào SDK.
@objc func signOut() {
self.vnptSmartCASDK?.signOut(callback: { result in
if result.status == SmartCAResultCode.SUCCESS_CODE {
// Xử lý khi thành công
} else {
// Xử lý khi có lỗi
print("Thông tin lỗi: \(result.status) - \(result.statusDesc) - \(result.data)")
}
})
}

📦 Hàm hủy kết nối với SDK (destroySDK)

override func viewDidDisappear(_ animated: Bool) {
self.vnptSmartCASDK?.destroySDK();
}