Nhảy tới nội dung

Tích hợp iOS

cẩn thận

Yêu cầu 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 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
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.
  • 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();
}