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/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 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();
}