Verifying Your Customer's Identity Through Live Experience

Topics in this article

5 Minute Read

Gone are the days of inconveniencing your customers to show up in person with their official documents to apply for products and services. Now, using Live Experience, you can verify your customer's identity and verify the authenticity of their official documents with in-channel video identity verification. In-channel video identity verification allows you to:

  • Onboard new users simply and quickly from a mobile app

  • Reduce your operational costs

  • Meet local regulations and standards around Know Your Customer (KYC), Anti-Money Laundering (AML), and electronic Identification, Authentication and trust Services (eIDAS)

  • Provide a better remote end-user experience

It's simple:

  • Configure your Live Experience application for identity verification

  • Implement identity verification in your iOS or Android app

For your customers, they're walked through a streamlined user experience to scan and submit their documents for authentication before being automatically connected with an associate on a video call.

For your associates, identity-verification engagements are distinguished from other engagement types, they are presented with the scanned documents and the authenticity result. They can quickly determine whether the customer matches the submitted ID and can decide whether to approve or deny the request being made.

The following graphic and callouts illustrate the identity verification functionality in the Associate Desktop.

Description of kyc_overview.png follows
Description of the illustration ''kyc_overview.png''

  1. A red badge icon informs associates of an incoming identity-verification engagement.

  2. Identity-verification engagements are recorded video engagements. A video engagement affords the associate an opportunity to see the customer's face, to ask them to provide the same ID card or document they scanned, and to compare them all in one interface.

  3. For identity-verification engagements, the associate can switch between seeing the Call Details and ID Verification details.

  4. The scanned document's authenticity result is displayed to the associate.

  5. The scanned document is displayed to the associate, so that they can ensure it is the same one being displayed in the live video engagement.

  6. The associate can choose to either reject or verify the customer's application.

Configuring Identity Verification

Live Experience partners with Jumio to deliver document verification services. You need to have a Jumio account before you can enable and configure identity verification in Live Experience.

You configure identity verification using the Live Experience Admin Console. Go to one of the following URLs to get started:

  • https://live.oraclecloud.com/ui?tenant=your_tenant_name

    or, for EMEA customers

  • https://emea.live.oraclecloud.com/ui?tenant=your_tenant_name

First, you need to enable the identity verification service:

  1. From the Admin Console navigation menu, select Applications, then select your application from the drop-down list, and then select the ID Verification tab.

  2. Select the identity service provider with whom you have an account and enter the requested account details.

    In-channel video identity verification is now available for you to use.

  3. Set up an engagement scenario to use the identity verification service.

    To help you and to make development easier, there is already a default engagement scenario called "Know_Your_Customer" for this exact purpose.

    You can either modify the Know_Your_Customer scenario to meet your needs, modify one of your existing engagement scenarios to use the identity verification service, or create a new engagement scenario.

    See Live Experience Engagement Scenarios: Choosing the Right Digital Channels for the Job for more information about engagement scenarios.

  4. (Optional) You can use the Call Type context attribute to create routing rules for when the Call Type is SMS. See Focus Your Resources: Get Your Customers to the Right Team with the Right Skills for more information about setting up routing rules

Whether you are using the default scenario or one you've created, note the following particularities about the engagement scenario that uses the identity verification service:

  • Unlike other types of engagement scenarios in your mobile apps – that start with your customer tapping on the Live Experience widget – the identity-verification engagement starts immediately when the page or view containing the engagement scenario opens.

  • To enable the identity verification service on an engagement scenario, you turn on Enable ID Verification.

    Description of kyc_engscen.png follows
    Description of the illustration ''kyc_engscen.png''

  • When Enable ID Verification is turned on, other fields and buttons are automatically modified:

    • Enable Short Code and Enable Meeting are turned off because they don't work with the identity verification service. If you try to turn either of these buttons back on, Enable ID Verification gets turned off.

    • The End User section is disabled and uneditable. This is because the identity verification service is a preconfigured video engagement that starts automatically without the customer clicking or tapping on the widget.

Implementing Identity Verification in a Mobile App

Implement identity verification in your iOS or Android app.

Implementing Identity Verification with Jumio in an iOS App

This section assumes you 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.

To implement identity verification into your iOS app, open your tenant application project and do the following:

  1. Log into your Jumio account and download the following SDKs:

    • JumioCore.framework

    • BAMCheckout.framework

    • MicroBlink.framework

    • Netverify.framework

    • NetverifyFace.framework

    • ZoomAuthenticationHybrid.framework

  2. Link and embed the Jumio SDKs.

  3. Contact your Oracle Live Experience account manager and request the iOS ID Verification SDK. Once you've gotten it, extract it to a folder on your computer.

  4. In your application project, replace the Live Experience iOS SDK with the ID Verification SDK.

  5. In your tenant application, create a new view controller for identity verification.

  6. 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.

  7. In the identity verification view controller, implement the call logic like 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)
    .
    .
    .
    
  8. (Optional) Listen for specific Jumio events and notifications and implement your own responses. The available Jumio events are:

    • 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 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")
      

    For example, you could listen for when the scanned documents are successfully scanned and then flash a green checkmark to the user. To capture the event for when the documents have been captured:

    NotificationCenter.default.addObserver(
      self,
      selector: #selector(self.haveCapturedIdentityDocuments),
      name: NSNotification.Name(rawValue: "oracle.widget.notification.IdentityVerificationDocumentsCaptured"),
      object: nil)
    

Implementing Identity Verification with Jumio in an Android App

This section assumes you already have a working Android app to which you are adding an identity-verification engagement scenario.

Unlike other types of engagement scenarios in Android apps that start with the customer tapping on the Live Experience widget, the identity-verification engagement starts automatically when the page containing identity verification opens. The user doesn't tap on anything besides the button or link that opens the page containing the identity-verification engagement.

To implement identity verification into your Android app, open your tenant application project and do the following:

  1. Implement the following SDKs in the build.gradle file:

    ext {
      JUMIO_SDK_VERSION = "3.0.0"
    }
     
    // for Jumio
    implementation "com.jumio.android:core:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:bam:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:nv:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:nv-mrz:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:nv-nfc:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:nv-ocr:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:nv-barcode:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:nv-barcode-vision:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:face:${JUMIO_SDK_VERSION}@aar"
    implementation "com.jumio.android:dv:${JUMIO_SDK_VERSION}@aar"
     
    //for core:
    implementation "androidx.appcompat:appcompat:1.0.0"
    implementation "androidx.room:room-runtime:2.0.0"
     
    //for nv:
    implementation "com.google.android.material:material:1.0.0"
    implementation "androidx.cardview:cardview:1.0.0"
     
    //only for nv-nfc
    implementation "com.madgag.spongycastle:prov:1.58.0.0"
    implementation "net.sf.scuba:scuba-sc-android:0.0.16"
     
    //only for nv-face
    implementation "com.facetec:zoom-authentication-hybrid:7.0.4@aar"
    
  2. Add the following activity to src\main\AndroidManifest.xml:

    <activity
      android:name="com.jumio.nv.NetverifyActivity"
      android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
      android:hardwareAccelerated="true"
      android:theme="@style/CustomNetverifyTheme"
      android:windowSoftInputMode="adjustResize"/>
    
  3. Add a theme for identity verification to \src\main\res\values\styles.xml. Use the following sample theme and modify it as required.

    <!-- base application theme for Jumio -->
     
    <style name="CustomNetverifyTheme" parent="Theme.Netverify">
      <!-- global colors -->
      <item name="colorPrimary">#E0F0FD</item>
      <item name="colorPrimaryDark">#cccccc</item>
      <item name="colorControlNormal">#000000</item>
      <item name="jumio_toolbarStyle">@style/Jumio.Actionbar.Title</item>
      <item name="jumio_toolbarSubStyle">@style/Jumio.Infobar.Title</item>
      <item name="android:windowBackground">@color/CustomAndroidBackground</item>
     
      <!-- loading sdk specific colors -->
      <item name="netverify_scanOptionsLoadingProgress">#FFFFFF</item>
     
      <!-- Replace the HEX color value above to change the loading progress color (SDK start)-->
     
      <!-- select document specific colors -->
      <item name="netverify_scanOptionsLoadingBackground">#ffffff</item>
      <item name="netverify_scanOptionsItemBackground">#509ed6</item>
      <item name="netverify_scanOptionsItemForeground">#ffffff</item>
      <item name="netverify_scanOptionsItemHeaderBackground">#4c95c9</item>
     
      <!-- scan instructions specific colors -->
      <item name="netverify_helpBackground">#FFFFFFFF</item><!--70%-->
      <item name="netverify_helpProgressString">#80000000</item>
      <item name="netverify_helpTitle">#000000</item>
      <item name="netverify_helpImage">#000000</item>
      <item name="netverify_helpSeperator">#33FFFFFF</item>
      <item name="netverify_helpInstructions">#000000</item>
      <item name="netverify_helpFallback">#FFFFFF</item>
      <item name="netverify_helpFallbackText">#222222</item>
     
      <!-- scan document (scan screen) specific colors -->
      <item name="netverify_scanOverlay">#B3FFFFFF</item>
      <item name="netverify_scanBackground">#40000000</item><!--25%-->
     
      <!-- readability check specific colors -->
      <item name="netverify_confirmationBackground">#ffffff</item>
      <item name="netverify_confirmationHintStyle">@style/Custom.Netverify.Confirmation.Hint</item>
      <item name="netverify_confirmationPositiveStyle">@style/Jumio.Confirm.Button.Positive</item>
      <item name="netverify_confirmationNegativeStyle">@style/Jumio.Confirm.Button.Negative</item>
     
      <!-- submission error (error screen) specific colors -->
      <item name="netverify_submissionErrorStatusBar">#B3B3B3</item>
      <item name="netverify_submissionErrorBackground">#FFFFFF</item>
      <item name="netverify_submissionErrorTitle">#1A1A1B</item>
      <item name="netverify_submissionErrorDescription">#565B5D</item>
      <item name="netverify_submissionErrorSeperator">#000000</item>
      <item name="netverify_submissionErrorImage">#FF1911</item>
      <item name="netverify_submissionErrorButtonBackground">#3F61B5</item>
      <item name="netverify_submissionErrorButtonText">#FFFFFF</item>
     
      <!-- submission success (success screen) specific colors -->
      <item name="netverify_submissionProgressSuccessTitle">#000000</item>
      <item name="netverify_submissionProgressSuccessDescription">#000000</item>
      <item name="netverify_submissionProgressSuccessSeperator">#000000</item>
      <item name="netverify_submissionProgressSuccessImage">#509ed6</item>
      <item name="netverify_submissionProgressSuccessBackground">#ffffff</item>
    </style>
     
    <!-- actionbar title color -->
    <style name="Jumio.Actionbar.Title" parent="ThemeOverlay.AppCompat">
      <item name="android:textColorPrimary">#000000</item>
    </style>
     
    <!-- infobar title color -->
    <style name="Jumio.Infobar.Title" parent="@android:style/TextAppearance">
      <item name="android:textColor">#000000</item>
    </style>
     
    <!-- positive button theme (readability screen) -->
    <style name="Jumio.Confirm.Button.Positive" parent="">
      <item name="android:textColor">#FFFFFF</item>
      <item name="android:background">#509ed6</item>
    </style>
     
    <!-- negative button theme (readability screen) -->
    <style name="Jumio.Confirm.Button.Negative" parent="">
      <item name="android:textColor">#FFFFFF</item>
      <item name="android:background">#509ed6</item>
    </style>
     
    <!-- readability info theme (readability screen) -->
    <style name="Custom.Netverify.Confirmation.Hint" parent="Netverify.Confirmation.Hint">
      <item name="android:theme">@style/ThemeOverlay.AppCompat.Dark</item>
      <item name="android:background">#ffffff</item>
      <item name="android:textColor">#000000</item>
    </style>
     
    <color name="CustomAndroidBackground">#ffffff</color>
     
    <style name="WarningDivider">
      <item name="android:layout_width">match_parent</item>
      <item name="android:layout_height">2dp</item>
      <item name="android:background">#E2E2E4</item>
    </style>
    
  4. Create a new page for identity verification.

  5. In your tenant application, implement some kind of action that opens the new page. For example, create a button labeled Scan ID that opens the identity-verification page.

  6. In the identity verification page, implement the call logic like 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":

    .
    .
    .
    CommunicationFragment.contextAttributes.startVideoInFullScreen = true
    CommunicationFragment.contextAttributes.startVideoWithFrontCamera = true
    CommunicationFragment.contextAttributes.set("appLocation","Know Your Customer")
    .
    .
    .
    
  7. (Optional) Listen for specific Jumio events and notifications and implement your own responses. The available Jumio events are:

    • Sent when the verification is complete

      LIVE_VERIFICATION_COMPLETE
      
    • Sent when the verification failed.

      LIVE_VERIFICATION_FAILED
      
    • Sent when the verification is canceled

      LIVE_VERIFICATION_CANCELED
      
    • Sent when the verification is incomplete.

      LIVE_VERIFICATION_INCOMPLETE
      
    • Sent when the session is connecting.

      LIVE_CONNECTING
      
    • Sent when the session ended due to error.

      LIVE_ERROR
      

    For example, you could listen for when the scanned documents are successfully scanned and then flash a green checkmark to the user. To capture the event for when the documents have been captured:

    // Create Widget and set the customized notification handler
     
    mCxFragment = (CommunicationFragment) manager.findFragmentByTag(FRAGMENT_TAG);
     
      if (mCxFragment == null) {
        mCxFragment = CommunicationFragment.newInstance();
        getSupportFragmentManager()
          .beginTransaction()
          .add(R.id.cx_container, mCxFragment, FRAGMENT_TAG)
          .commit();
      }
      mCxFragment.setNotificationHandler(new MceNotificationHandler());
     
    // Implement customized notification handler, and handle the KYC verification result notification
     
    /**
    * An implementation for notification handler.
    */
    class MceNotificationHandler extends DefaultNotificationHandler {
     
      private EventType lastEvent = EventType.LIVE_ENDED;
     
      @Override
      public void notification(final NotificationPayload payload) {
        super.notification(payload);
        synchronized (lastEvent) {
          lastEvent = payload.getEventType();
          if (lastEvent == EventType.LIVE_VERIFICATION_COMPLETE
            || lastEvent == EventType.LIVE_VERIFICATION_FAILED
            || lastEvent == EventType.LIVE_VERIFICATION_CANCELED
            || lastEvent == EventType.LIVE_VERIFICATION_INCOMPLETE) {
            handleKycNotification(lastEvent);
          }
        }
      }
     
    }
    

Return to the Docs Home Page

Live Experience Get Started