VGSCollectSDK 1.16.3

VGSCollectSDK 1.16.3

Dmytro Khludkov 维护。



CircleCI UT license Platform swift Cocoapods Compatible

VGS Collect iOS SDK

VGS Collect - 是一款允许客户安全收集信息的软件套件,而无需实际掌握这些信息。VGSCollect iOS SDK 允许您通过表单安全地从您的用户处收集数据,而无需让这些数据通过您的系统。表单字段的行为类似于传统的输入字段,同时确保对未加密数据的访问安全。

目录

VGS Collect iOS SDK State VGS Collect iOS SDK Response

准备工作

您应该在 VGS Dashboard 上注册您的组织。沙盒金库将为您预先创建。您应该使用您的 <vaultId> 开始收集数据。按照以下集成指南操作。

集成

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。有关使用和安装说明,请访问他们的网站。要使用 CocoaPods 将 VGSCollectSDK 集成到 Xcode 项目中,请在您的 Podfile 中指定它。

pod 'VGSCollectSDK'

Swift Package Manager

Swift Package Manager 是自动化 Swift 代码分发的一个工具,并集成到 swift 编译器中。使用 VGSCollectSDK 需要 Xcode 的 Swift 工具版本 5.3。早期版本的 Xcode 不支持带资源的 Swift 包。要检查您的当前 Swift 工具版本,请在您的终端中运行

xcrun swift -version

注意事项:在某些情况下,您可以安装多个 Swift 工具版本。

有关更多详细信息,请遵循官方 Apple SPM 指南 说明
要使用 Swift Package Manager,在 Xcode 中添加 https://github.com/verygoodsecurity/vgs-collect-ios.git 依赖项并选择 精确 版本。

选择 VGSCollectSDK 以及可选的 VGSCollectSDK 提供的其他包

用法

将SDK导入您的文件

import VGSCollectSDK

创建VGSCollect实例和VGS UI元素

使用您的 <vaultId> 初始化VGSCollect实例。您可以在您的 组织仪表板 中获取它。

代码示例

这里是一个示例 行动中
自定义VGSTextFields...
/// Initialize VGSCollect instance
var vgsCollect = VGSCollect(id: "vauiltId", environment: .sandbox)

/// VGS UI Elements
var cardNumberField = VGSCardTextField()
var cardHolderNameField = VGSTextField()
var expCardDateField = VGSTextField()
var cvcField = VGSTextField()

/// Native UI Elements
@IBOutlet weak var stackView: UIStackView!

override func viewDidLoad() {
    super.viewDidLoad()

    /// Create card number field configuration
    let cardConfiguration = VGSConfiguration(collector: vgsCollect,
                                         fieldName: "card_number")
    cardConfiguration.type = .cardNumber
    cardConfiguration.isRequiredValidOnly = true

    /// Setup configuration to card number field
    cardNumberField.configuration = cardConfiguration
    cardNumberField.placeholder = "Card Number"
    stackView.addArrangedSubview(cardNumberField)

    /// Setup next textfields...
}
...
... 监视字段状态
override func viewDidLoad() {
    super.viewDidLoad()
	
    ...  
	
    /// Observing text fields
    vgsCollect.observeStates = { textFields in

        textFields.forEach({ textField in
            print(textdField.state.description)
            if textdField.state.isValid {
                textField.borderColor = .grey
            } else {
                textField.borderColor = .red
            }

            /// CardState is available for VGSCardTextField
            if let cardState = textField.state as? CardState {
                print(cardState.bin)
                print(cardState.last4)
                print(cardState.brand.stringValue)
            }
        })
    }
}
... 将数据发送到您的保险库
// ...

// MARK: - Send data    
func sendData() {

    /// handle fields validation before send data
    guard cardNumberField.state.isValid else {
	print("cardNumberField input is not valid")
    }

    /// extra information will be sent together with all sensitive card information
    var extraData = [String: Any]()
    extraData["customKey"] = "Custom Value"

    /// send data to your Vault
    vgsCollect.sendData(path: "/post", extraData: extraData) { [weak self](response) in
      switch response {
        case .success(let code, let data, let response):
          // parse data
        case .failure(let code, let data, let response, let error):
          // handle failed request
          switch code {
            // handle error codes
          }
      }
    }
}

VGSCardTextField 自动检测卡提供商并在输入字段中显示卡品牌图标。

扫描信用卡数据

VGS Collect SDK提供可选的卡扫描解决方案。仅使用VGS提供的扫描模块,这些模块已通过VGS PCI要求的审计。

与Cocoapods集成

将 'VGSCollectSDK' 与扫描模块的 pod 之一一并添加

pod 'VGSCollectSDK'

# Add one of available scan providers
pod 'VGSCollectSDK/CardIO'
pod 'VGSCollectSDK/BlinkCard'  

与 Swift Package Manager 整合

自 1.7.11 版本开始,VGSCollectSDK 支持通过 Swift PM 整合 CardIO

要使用 CardIO,将 VGSCollectSDKVGSCardIOCollector 包添加到您的目标中。要使用 BlinkCard,将 VGSCollectSDKVGSBlinkCardCollector 包添加到您的目标中。

代码示例

这里是一个示例 行动中
设置 VGSCardIOScanController...
class ViewController: UIViewController {
	 
    var vgsCollect = VGSCollect(id: "vauiltId", environment: .sandbox)

    /// Init VGSCardIOScanController
    var scanController = VGSCardIOScanController()

    /// Init VGSTextFields...

    override func viewDidLoad() {
        super.viewDidLoad()

        /// set VGSCardIOScanDelegate
        canController.delegate = self
    }

    /// Present scan controller 
    func scanData() {
        scanController.presentCardScanner(on: self,
				animated: true,
			      completion: nil)
    }

    // MARK: - Send data  
    func sendData() {
        /// Send data from VGSTextFields to your Vault
        vgsCollect.sendData{...}
    }
}
...
... 处理 VGSCardIOScanControllerDelegate
// ...

/// Implement VGSCardIOScanControllerDelegate methods
extension ViewController: VGSCardIOScanControllerDelegate {

    ///Asks VGSTextField where scanned data with type need to be set.
    func textFieldForScannedData(type: CradIODataType) -> VGSTextField? {
	switch type {
	case .expirationDate:
	    return expCardDateField
	case .cvc:
	    return cvcField
	case .cardNumber:
	    return cardNumberField
	default:
	    return nil
	}
    }

    /// When user press Done button on CardIO screen
    func userDidFinishScan() {
	scanController.dismissCardScanner(animated: true, completion: { [weak self] in
	    /// self?.sendData()
	})
    }
}

处理 VGSCardIOScanControllerDelegate 函数。要将扫描数据设置到特定的 VGSTextField 中,实现 textFieldForScannedData:。如果扫描数据有效,则会在用户确认后自动设置到您的 VGSTextField 中。检查 CardIODataType 获取可获得的数据扫描类型。

不要忘记将 NSCameraUsageDescription 键和描述添加到您的应用 Info.plist 文件中。

上传文件

您可以使用 VGSFilePickerController 给您的应用程序添加文件上传功能。

代码示例

设置 VGSFilePickerController...
class FilePickerViewController: UIViewController, VGSFilePickerControllerDelegate {

  var vgsCollect = VGSCollect(id: "vailtId", environment: .sandbox)
  
  /// Create strong referrence of VGSFilePickerController
  var pickerController: VGSFilePickerController?

  override func viewDidLoad() {
      super.viewDidLoad()

      /// create picker configuration
      let filePickerConfig = VGSFilePickerConfiguration(collector: vgsCollect,
      							fieldName: "secret_doc",
						       fileSource: .photoLibrary)

      /// init picket controller with configuration
      pickerController = VGSFilePickerController(configuration: filePickerConfig)

      /// handle picker delegates
      pickerController?.delegate = self
  }

  /// Present picker controller
  func presentFilePicker() {
      pickerController?.presentFilePicker(on: self, animated: true, completion: nil)
  }
}
...
... 处理 VGSFilePickerControllerDelegate 行动中
// ...  

// MARK: - VGSFilePickerControllerDelegate
/// Check file info, selected by user
func userDidPickFileWithInfo(_ info: VGSFileInfo) {
	let fileInfo = """
		    File info:
		    - fileExtension: \(info.fileExtension ?? "unknown")
		    - size: \(info.size)
		    - sizeUnits: \(info.sizeUnits ?? "unknown")
		    """
	print(fileInfo)
	pickerController?.dismissFilePicker(animated: true,
					  completion: { [weak self] in
					  
		self?.sendFile()
	})
}

// Handle cancel file selection
func userDidSCancelFilePicking() {
	pickerController?.dismissFilePicker(animated: true)
}

// Handle errors on picking the file
func filePickingFailedWithError(_ error: VGSError) {
	pickerController?.dismissFilePicker(animated: true)
}
... 将文件发送到您的安全库
// ...

// MARK: - Send File	
/// Send file and extra data
func sendFile() {

	/// add extra data to send request	
	let extraData = ["document_holder": "Joe B"]

  /// send file to your Vault
  vgsCollect.sendFile(path: "/post", extraData: extraData) { [weak self](response) in
    switch response {
      case .success(let code, let data, let response):
        /// remove file from VGSCollect storage
        self?.vgsCollect.cleanFiles()
      case .failure(let code, let data, let response, let error):
        // handle failed request
        switch code {
          // handle error codes
        }
    }
  }
}

当需要时,使用 vgsCollect.cleanFiles() 解除文件与 VGSCollect 实例的关联。

演示应用程序

在iOS上收集卡片数据的演示应用程序在此处:https://github.com/vgs-samples/very-spacy-food-iOS.

文档

版本发布

要跟踪 VGSCollectSDK 的更新和更改,请检查 版本发布页面

指标

VGSCollectSDK 跟踪一些关键指标以了解 SDK 功能使用情况,这有助于我们了解哪些领域需要改进。不跟踪任何个人信息。您可以在 VGSAnalyticsClient 中轻松选择不出于是否收集指标。

VGSAnalyticsClient.shared.shouldCollectAnalytics = false

依赖

许可

VGSCollect iOS SDK 采用 MIT 许可协议发布。有关详细信息,请参阅 LICENSE 文件