Tích hợp 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 ViewController
// 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, để 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/PROD
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: Đăng ký tài khoản, Quản lý chứng thư, Lịch sử giao dịch, Tài khoản,...
- Lấy thông tin xác thực người dùng (accessToken & credentiald & serial)
- Xác nhận / Hủy giao dịch ký số
- Tạo tài khoản
- Đăng xuất
- Hủy kết nối SDK
📦 Quản lý tài khoản
- Đối tác tạo 1 chức năng riêng trên ứng dụng của mình để người dùng sử dụng các chức năng của SDK như: Đăng ký tài khoản, Quản lý chứng thư, Lịch sử giao dịch, Tài khoản,...
@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ố
- Lấy accessToken, credentialId hoặc serial của chứng thư để tạo giao dịch phía backend. SDK sẽ tự kiểm tra tài khoản như: đã kích hoạt hay chưa, chứng thư hợp lệ hay không, tự động làm mới token khi hết hạn,...
- Sau khi lấy được thông tin đối tác tạo giao dịch từ phía backend của mình với hệ thống backend VNPT SmartCA để lấy tranId sau đó gọi hàm getWaitingTransaction.
- Đối tác tự bắn Notifycation về ứng dụng của mình để thông báo cho người dùng sau khi tạo giao dịch phía backend thành công, SDK VNPT SmartCA sẽ không bắn.
- Tài liệu tích hợp phía backend được cung cấp khi đăng ký tích hợp.
Lưu ý
- tranId là mã giao dịch do hệ thống VNPT SmartCA sinh ra và trả về cho đối tác. Ví dụ trandId: "48b7d184-bbf4-4fa2-a661-3a223dcb716a"
@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 / Huỷ giao dịch ký số
- 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
- 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
- Đă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
override func viewDidDisappear(_ animated: Bool) {
self.vnptSmartCASDK?.destroySDK();
}