Implement Identity Verification with Jumio in an iOS App

Implement identity verification in your iOS app.

Before you start

Before you begin, you must already have a working iOS app to which you are adding an identity-verification engagement scenario.
Unlike other types of engagement scenarios in iOS apps that start with the customer tapping on the Live Experience widget, the identity-verification engagement starts automatically when the view containing identity verification opens. The user doesn't tap on anything besides the button or link that opens the view containing the identity-verification engagement.

Here's what to do

  1. Open your tenant application project.
  2. Log into your Jumio account and download the following SDKs:
    • JumioCore.framework

    • BAMCheckout.framework

    • MicroBlink.framework

    • Netverify.framework

    • NetverifyFace.framework

    • ZoomAuthenticationHybrid.framework

  3. Link and embed the Jumio SDKs.
  4. Contact your Oracle Live Experience account manager and request the iOS ID Verification SDK.
    When you get it, extract it to a folder on your computer.
  5. In your application project, replace the Live Experience iOS SDK with the ID Verification SDK.
  6. In your tenant application, create a new view controller for identity verification.
  7. In your tenant application, implement some kind of action that opens the new view. For example, create a button labeled Scan ID that opens the identity verification view.
  8. In the identity verification view controller, implement the call logic the same way you would for any other engagement scenario, but set the appLocation value to the engagement scenario that has the identity verification service enabled. For example, if you are using the default identity verification engagement scenario to deliver the identity verification service, set appLocation to "Know Your Customer":
    .
    .
    .
    Controller.shared.settings.startVideoInFullScreen = true
    Controller.shared.settings.startVideoWithFrontCamera = true
    Controller.shared.contextAttributes.setValue("Know Your Customer", forKey: "appLocation")
    Controller.shared.addComponent(viewController: self.parent)
    .
    .
    .
  9. Optionally, enable Jumio facial recognition service, which compares and verifies the likeness of the faces of the person scanning their identity card and the picture on the card.
    The Jumio assessment is reported to the associate in the Live Experience Associate Desktop. Add the following line of code beneath the context attribute setting appLocation: Controller.shared.settings.attemptFaceMatchWhenVerifyingIdentity = true.
  10. Optionally, listen for specific Jumio events and notifications and implement your own responses. For example:
    • Sent when an identity verification process is initiated.

      static let IdentityVerificationInitiated = NSNotification.Name("oracle.widget.notification.IdentityVerificationInitiated")

    • Sent if the process is cancelled either due to error or user request. The notification object is a Boolean, whose value is true if the process is cancelled by the customer on the app.

      static let IdentityVerificationCancelled = NSNotification.Name("oracle.widget.notification.IdentityVerificationCancelled")

    • Sent when the identity verification documents have been captured. It carries the netVerificationSuccessData object as payload.

      static let IdentityVerificationDocumentsCaptured = NSNotification.Name("oracle.widget.notification.IdentityVerificationDocumentsCaptured")

    • Sent when we are querying the outcome of the identity verification process.

      static let ObtainingIdentityVerificationResult = NSNotification.Name("oracle.widget.notification.ObtainingIdentityVerificationResult")

    • Sent when the verification results are obtained.

      static let IdentityVerificationResultObtained = NSNotification.Name("oracle.widget.notification.IdentityVerificationResultObtained")

    • Sent when an identity verification outcome has been reached. It carries information that describes the outcome (Verified, Failed, Cancelled, Incomplete).

      static let IdentityVerificationResultObtained = NSNotification.Name("oracle.widget.notification.IdentityVerificationResultObtained")

    • Sent when an identity verification outcome has been reached. It carries information that describes the outcome (Verified, Failed, Cancelled, Incomplete).

      static let IdentityVerificationResultObtained = NSNotification.Name("oracle.widget.notification.IdentityVerificationResultObtained")

In this example, you are listening for when the documents are successfully scanned and then flashing a green checkmark to the user.

To capture the event for when the documents have been successfully scanned:
NotificationCenter.default.addObserver(
 self,
 selector: #selector(self.haveCapturedIdentityDocuments),
 name: NSNotification.Name(rawValue: "oracle.widget.notification.IdentityVerificationDocumentsCaptured"),
 object: nil)
Or, you could listen for when the verification results are obtained...
NotificationCenter.default.addObserver(
 self,
 selector: #selector(self.catchIdVerificationResult),
 name: NSNotification.Name(rawValue: "oracle.widget.notification.IdentityVerificationResultObtained"),
 object: nil)
...so that you can obtain the associated Jumio reference code (which you can use in REST API calls to the Jumio API):
// Get the Jumio reference code kycScanReference
 @objc func catchIdVerificationResult(notification: NSNotification) {
 Log.debug("ID Verification outcome = \(notification.object ?? "")")
 self.verificationResult = notification.object as? String
 if self.verificationResult == "Verified" {
 Log.debug("kycScanReference=\(Controller.shared.service.kycScanReference)")
 }
 ...

For a complete list of Live Experience notification events, see the Oracle Live Experience iOS API Reference.