iOS
cẩn thận
Yêu cầu iOS >= 13.0
Bước 1: Tải SDK và cấu hình Project
-
Tải phiên bản SDK mới nhất từ link: https://github.com/VNPT-SmartCA/ios_vnptsmartca_sdk_lite/releases
-
Kéo thả toàn bộ file _.xcframework và _.framework vào trong project. Đi tới Targets Project -> General -> Frameworks, Libraries, and Embedded Content
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 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(
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
)
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
📦 Lấy thông tin chứng thư số (getAuthentication)
- customerId là số CCCD, HC, MST
@objc func getAuthentication(customerId: String) {
self.vnptSmartCASDK?.getAuthentication(customerId: customerId, 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)
- 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)")
}
})
}
📦 Hàm hủy kết nối với SDK (destroySDK)
override func viewDidDisappear(_ animated: Bool) {
self.vnptSmartCASDK?.destroySDK();
}