Tích hợp iOS
Yêu cầu
Yêu cầu iOS >= 9.0
Bước 1: Cấu hình file Info.plist
- CFBundleURLSchemes: là Mobile Code/clientId trên môi trường tương ứng được gửi kèm trong email khi đăng ký tích hợp.
 - LSApplicationQueriesSchemes: Thêm scheme vnptsmartca(môi trường Production) và vnptsmartcademo(môi trường Demo).
 
<key>CFBundleURLTypes</key>
<array>
       <dict>
       <key>CFBundleURLName</key>
       <string></string>
       <key>CFBundleURLSchemes</key>
       <array>
       <string>Mobile_Code hoặc VNPTSmartCAPartner-clientId</string>
       // Ví dụ VNPTSmartCAPartner-48b7d184-bbf4-4fa2-a661-3a223dcb716a hoặc VNPTSmartCAPartner_4b1a-3a223dcb716a.apps.smartcaapi.com
       </array>
       </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
       <string>vnptsmartca</string>
       <string>vnptsmartcademo</string>
</array>
Bước 2: Import SDK trong file AppDelegate.swift
import VNPTSmartCAiOSSDK
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
       VNPTSmartCATransaction.receiveBackLink(url: url, sourceApp: sourceApplication!)
       return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
       VNPTSmartCATransaction.receiveBackLink(url: url, sourceApp: "")
       return true
}
Lưu ý
Đối với phiên bản iOS >= 13.0, cần import SDK trong file SceneDelegate.swift.
import VNPTSmartCAiOSSDK
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
       VNPTSmartCATransaction.receiveBackLink(url: URLContexts.first!.url, sourceApp: "")
}
Bước 3: Cập nhật giao diện và truyền tham số để mở ứng dụng VNPTSmartCA
- Trước khi mở ứng dụng VNPTSmartCA, cần chọn môi trường với hàm: VNPTSmartCATransaction.setEnvironment là DEMO hoặc PRODUCTION.
 
import VNPTSmartCAiOSSDK 
override func viewDidLoad() {
       //STEP 1: addObserver Notification
       NotificationCenter.default.removeObserver(self,name: NSNotification.Name(rawValue: "<VNPTSmartCA>NotificationCenterReceived"), object: nil)
       NotificationCenter.default.addObserver(self, selector: #selector(self.NotificationCenterTokenReceived), name:NSNotification.Name(rawValue: "<VNPTSmartCA>NotificationCenterReceived"), object: nil)
       //STEP 2: INIT TRANSACTION BASIC INFO AS CLIENT ID AND TRAN ID
       let tranInfo: NSMutableDictionary = NSMutableDictionary()
       tranInfo["clientId"] = "partnerSchemeId" // Mobile_Code hoặc VNPTSmartCAPartner-clientId khớp với giá trị trong CFBundleURLSchemes.
       tranInfo["tranId"] = "tranId"  // Id của giao dịch chờ ký số
       VNPTSmartCATransaction.setEnvironment(_environment: VNPTSmartCATransaction.ENVIRONMENT.DEMO)
       VNPTSmartCATransaction.createTransactionInformation(info: tranInfo)
       //STEP 3: OPEN VNPTSMARTCA
      VNPTSmartCATransaction.handleOpen()
}
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"
Bước 4: Nhận dữ liệu trả về từ ứng dụng VNPTSmartCA
// You can listen return event from VNPTSmartCA app in here
@objc func NotificationCenterTokenReceived(notify: NSNotification) {
       let response: NSMutableDictionary = notify.object! as! NSMutableDictionary
       let _statusStr = "\(response["status"] as! String)"
       let _message = response["message"]
       if (_statusStr == "0") {
              print("Status code: \(_statusStr)")
              print("Message:", _message as! String)
       } else {
       }
}