Skip to content

Latest commit

 

History

History
581 lines (465 loc) · 24.4 KB

README.md

File metadata and controls

581 lines (465 loc) · 24.4 KB

Plugin for React Native

Official Jumio Mobile SDK plugin for React Native

This plugin is compatible with version 3.9.2 of the Jumio SDK. If you have questions, please reach out to your Account Manager or contact Jumio Support.

Table of Contents

Compatibility

We only ensure compatibility with a minimum React Native version of 0.63.4

Setup

Create React Native project and add the Jumio Mobile SDK module to it.

react-native init MyProject
cd MyProject
npm install --save https://github.com/Jumio/mobile-react.git#v3.9.2

Integration

iOS

  1. Add the "NSCameraUsageDescription"-key to your Info.plist file.

Android

  1. Open your AndroidManifest.xml file and change allowBackup to false.
<application
  ...
  android:allowBackup="false">.
  ...
</application>
  1. Make sure your compileSdkVersion and buildToolsVersion are high enough.
android {
  compileSdkVersion 29
  buildToolsVersion "29.0.3"
  ...
}
  1. Enable MultiDex Follow the Android developers guide: https://developer.android.com/studio/build/multidex.html
android {
  ...
  defaultConfig {
    ...
    multiDexEnabled true
  }
}
  1. Add the Jumio Mobile SDK repository
repositories {  
  maven { url 'https://mobile-sdk.jumio.com' }
}

Usage

  1. Add "NativeModules" to the import of 'react-native'.
import {
  ...
  NativeModules
} from 'react-native';
  1. Create a variable of your iOS module:
const { JumioMobileSDKNetverify } = NativeModules;
const { JumioMobileSDKBamCheckout } = NativeModules;
const { JumioMobileSDKDocumentVerification } = NativeModules;
  1. The SDKs can be initialized with the following calls.
JumioMobileSDKNetverify.initNetverify(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration});
JumioMobileSDKDocumentVerification.initDocumentVerification(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration});
JumioMobileSDKBamCheckout.initBAM(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration});

Datacenter can either be US, EU or SG.

Usage

Netverify & Fastfill

To initialize the SDK, perform the following call.

JumioMobileSDKNetverify.initNetverify(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration});

Datacenter can either be US, EU or SG.

Configure the SDK with the configuration-Object.

Configuration Datatype Description
enableVerification Boolean Enable ID verification
callbackUrl String Specify an URL for individual transactions
enableIdentityVerification Boolean Enable face match during the ID verification for a specific transaction
preselectedCountry Boolean Specify the issuing country (ISO 3166-1 alpha-3 country code)
customerInternalReference String Allows you to identify the scan (max. 100 characters)
reportingCriteria String Use this option to identify the scan in your reports (max. 100 characters)
userReference String Set a customer identifier (max. 100 characters)
sendDebugInfoToJumio Boolean Send debug information to Jumio.
dataExtractionOnMobileOnly Boolean Limit data extraction to be done on device only
cameraPosition String Which camera is used by default. Can be FRONT or BACK.
preselectedDocumentVariant String Which types of document variants are available. Can be PAPER or PLASTIC
documentTypes String-Array An array of accepted document types: Available document types: PASSPORT, DRIVER_LICENSE, IDENTITY_CARD, VISA
enableWatchlistScreening String Enables Jumio Screening. Can be ENABLED, DISABLED or DEFAULT (when not specified reverts to DEFAULT)
watchlistSearchProfile String Specifies specific profile of watchlist

Initialization example with configuration.

JumioMobileSDKNetverify.initNetverify("API_TOKEN", "API_SECRET", "US", {
  enableVerification: true,
  enableIdentityVerification: true,
  userReference: "CUSTOMERID",
  preselectedCountry: "USA",
  cameraPosition: "BACK",
  documentTypes: ["DRIVER_LICENSE", "PASSPORT", "IDENTITY_CARD", "VISA"],
  enableWatchlistScreening: "ENABLED",
  watchlistSearchProfile: "YOURPROFILENAME"
});

Android eMRTD scanning

If you are using eMRTD scanning, following lines are needed in your Manifest file:

-keep class net.sf.scuba.smartcards.IsoDepCardService {*;}
-keep class org.jmrtd.** { *; }
-keep class net.sf.scuba.** {*;}
-keep class org.bouncycastle.** {*;}
-keep class org.ejbca.** {*;}

-dontwarn java.nio.**
-dontwarn org.codehaus.**
-dontwarn org.ejbca.**
-dontwarn org.bouncycastle.**

Add the needed dependencies following this chapter of the android integration guide.

As soon as the SDK is initialized, the SDK is started by the following call.

  JumioMobileSDKNetverify.startNetverify();

Document Verification

To initialize the SDK, perform the following call.

JumioMobileSDKDocumentVerification.initDocumentVerification(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration});

Datacenter can either be US, EU or SG.

Configure the SDK with the configuration-Object. (configuration marked with * are mandatory)

Configuration Datatype Description
type* String See the list below
userReference* String Set a customer identifier (max. 100 characters)
country* String Set the country (ISO-3166-1 alpha-3 code)
customerInternalReference* String Allows you to identify the scan (max. 100 characters)
reportingCriteria String Use this option to identify the scan in your reports (max. 100 characters)
callbackUrl String Specify an URL for individual transactions
documentName String Override the document label on the help screen
customDocumentCode String Set your custom document code (set in the merchant backend under "Settings" - "Multi Documents" - "Custom"
cameraPosition String Which camera is used by default. Can be FRONT or BACK.

Possible types:

  • BS (Bank statement)
  • IC (Insurance card)
  • UB (Utility bill, front side)
  • CAAP (Cash advance application)
  • CRC (Corporate resolution certificate)
  • CCS (Credit card statement)
  • LAG (Lease agreement)
  • LOAP (Loan application)
  • MOAP (Mortgage application)
  • TR (Tax return)
  • VT (Vehicle title)
  • VC (Voided check)
  • STUC (Student card)
  • HCC (Health care card)
  • CB (Council bill)
  • SENC (Seniors card)
  • MEDC (Medicare card)
  • BC (Birth certificate)
  • WWCC (Working with children check)
  • SS (Superannuation statement)
  • TAC (Trade association card)
  • SEL (School enrollment letter)
  • PB (Phone bill)
  • USSS (US social security card)
  • SSC (Social security card)
  • CUSTOM (Custom document type)

Initialization example with configuration.

JumioMobileSDKDocumentVerification.initDocumentVerification("API_TOKEN", "API_SECRET", "US", {
  type: "BC",
  userReference: "CUSTOMER ID",
  country: "USA",
  customerInternalReference: "YOURSCANREFERENCE",
  cameraPosition: "BACK"
});

As soon as the SDK is initialized, the SDK is started by the following call.

JumioMobileSDKDocumentVerification.startDocumentVerification();

BAM Checkout

To Initialize the SDK, perform the following call.

JumioMobileSDKBamCheckout.initBAM(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration});

Datacenter can either be US, EU or SG.

Configure the SDK with the configuration-Object.

Configuration Datatype Description
cardHolderNameRequired Boolean
sortCodeAndAccountNumberRequired Boolean
expiryRequired Boolean
cvvRequired Boolean
expiryEditable Boolean
cardHolderNameEditable Boolean
reportingCriteria String Overwrite your specified reporting criteria to identify each scan attempt in your reports (max. 100 characters)
vibrationEffectEnabled Boolean
enableFlashOnScanStart Boolean
cardNumberMaskingEnabled Boolean
offlineToken String In your Jumio merchant backend on the "Settings" page under "API credentials" you can find your Offline token. In case you use your offline token, you must not set the API token and secret
cameraPosition String Which camera is used by default. Can be FRONT or BACK.
cardTypes String-Array An array of accepted card types. Available card types: VISA, MASTER_CARD, AMERICAN_EXPRESS, CHINA_UNIONPAY, DINERS_CLUB, DISCOVER, JCB

Initialization example with configuration.

JumioMobileSDKBamCheckout.initBAM("API_TOKEN", "API_SECRET", "US", {
  cardHolderNameRequired: false,
  cvvRequired: true,
  cameraPosition: "BACK",
  cardTypes: ["VISA", "MASTER_CARD"]
});

As soon as the SDK is initialized, the SDK is started by the following call.

JumioMobileSDKBamCheckout.startBAM();

Offline scanning

If you want to use Fastfill in offline mode please contact Jumio Customer Service at [email protected] or https://support.jumio.com. Once this feature is enabled for your account, you can find your offline token in your Jumio customer portal on the "Settings" page under "API credentials".

iOS

Pass your offline token to your configuration object of BAM Checkout.

offlineToken: "TOKEN",

Android

Offline scanning not supported yet.

Retrieving information

You can listen to events to retrieve the scanned data:

  • EventDocumentData for Netverify results.

  • EventErrorNetverify for Netverify error.

  • EventDocumentVerification for Document Verification results.

  • EventErrorDocumentVerification for Document Verification error.

  • EventCardInformation for BAM results.

  • EventErrorBam for BAM error.

First add NativeEventEmitter to the import from 'react-native' and listen to the events.

import {
...
NativeEventEmitter
} from 'react-native';

The event receives a json object with all the data. The example below shows how to retrieve the information of each emitter as a String:

const emitterNetverify = new NativeEventEmitter(JumioMobileSDKNetverify);
emitterNetverify.addListener(
  'EventDocumentData',
  (EventDocumentData) => console.warn("EventDocumentData: " + JSON.stringify(EventDocumentData))
);
emitterNetverify.addListener(
  'EventErrorNetverify',
  (EventErrorNetverify) => console.warn("EventErrorNetverify: " + JSON.stringify(EventErrorNetverify))
);

const emitterDocumentVerification = new NativeEventEmitter(JumioMobileSDKDocumentVerification)
emitterDocumentVerification.addListener(
  'EventDocumentVerification',
  (EventDocumentVerification) => console.warn("EventDocumentVerification: " + JSON.stringify(EventDocumentVerification))
);
emitterDocumentVerification.addListener(
  'EventDocumentVerification',
  (EventDocumentVerification) => console.warn("EventDocumentVerification: " + JSON.stringify(EventDocumentVerification))
);

const emitterBamCheckout = new NativeEventEmitter(JumioMobileSDKBamCheckout)
emitterBamCheckout.addListener(
  'EventCardInformation',
  (EventCardInformation) => console.warn("EventCardInformation: " + JSON.stringify(EventCardInformation))
);
emitterBamCheckout.addListener(
  'EventErrorBam',
  (EventErrorBam) => console.warn("EventErrorBam: " + JSON.stringify(EventErrorBam))
);

Customization

Android

Netverify

The Netverify SDK can be customized to the respective needs by following this customization chapter.

BAM Checkout

The BAM Checkout SDK can be customized to the respective needs by following this customization chapter.

Document Verification

The Document Verification SDK can be customized to the respective needs by following this customization chapter.

iOS

The SDK can be customized to the respective needs by using the following initializers instead.

JumioMobileSDKNetverify.initNetverifyWithCustomization(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration}, {customization});
JumioMobileSDKDocumentVerification.initDocumentVerificationWithCustomization(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration}, {customization});
JumioMobileSDKBamCheckout.initBAMWithCustomization(<API_TOKEN>, <API_SECRET>, <DATACENTER>, {configuration}, {customization});

You can pass the following customization options to the initializer:

Customization key Type Description
disableBlur BOOL Deactivate the blur effect
backgroundColor STRING Change base view's background color
foregroundColor STRING Change base view's foreground color
tintColor STRING Change the tint color of the navigation bar
barTintColor STRING Change the bar tint color of the navigation bar
textTitleColor STRING Change the text title color of the navigation bar
documentSelectionHeaderBackgroundColor STRING Change the background color of the document selection header
documentSelectionHeaderTitleColor STRING Change the title color of the document selection header
documentSelectionHeaderIconColor STRING Change the icon color of the document selection header
documentSelectionButtonBackgroundColor STRING Change the background color of the document selection button
documentSelectionButtonTitleColor STRING Change the title color of the document selection button
documentSelectionButtonIconColor STRING Change the icon color of the document selection button
fallbackButtonBackgroundColor STRING Change the background color of the fallback button
fallbackButtonBorderColor STRING Change the border color of the fallback button
fallbackButtonTitleColor STRING Change the title color of the fallback button
positiveButtonBackgroundColor STRING Change the background color of the positive button
positiveButtonBorderColor STRING Change the border color of the positive button
positiveButtonTitleColor STRING Change the title color of the positive button
negativeButtonBackgroundColor STRING Change the background color of the negative button
negativeButtonBorderColor STRING Change the border color of the negative button
negativeButtonTitleColor STRING Change the title color of the negative button
scanOverlayStandardColor (NV only) STRING Change the standard color of the scan overlay
scanOverlayValidColor (NV only) STRING Change the valid color of the scan overlay
scanOverlayInvalidColor (NV only) STRING Change the invalid color of the scan overlay
scanOverlayTextColor (BAM only) STRING Change the text color of the scan overlay
scanOverlayBorderColor (BAM only) STRING Change the border color of the scan overlay

All colors are provided with a HEX string with the following format: #ff00ff.

Customization example

JumioMobileSDKNetverify.initNetverifyWithCustomization("API_TOKEN", "API_SECRET", "US", {
  enableVerification: false,
  ...
}, {
  disableBlur: true,
  backgroundColor: "#ff00ff",
  barTintColor: "#ff1298"
);

Callbacks

To get information about callbacks, Netverify Retrieval API, Netverify Delete API and Global Netverify settings and more, please read our page with server related information.

The JSONObject with all the extracted data that is returned for the specific products is described in the following subchapters:

Netverify & Fastfill

NetverifyDocumentData:

Parameter Type Max. length Description
selectedCountry String 3 ISO 3166-1 alpha-3 country code as provided or selected
selectedDocumentType String 16 PASSPORT, DRIVER_LICENSE, IDENTITY_CARD or VISA
idNumber String 100 Identification number of the document
personalNumber String 14 Personal number of the document
issuingDate Date Date of issue
expiryDate Date Date of expiry
issuingCountry String 3 Country of issue as (ISO 3166-1 alpha-3) country code
lastName String 100 Last name of the customer
firstName String 100 First name of the customer
dob Date Date of birth
gender String 1 m, f or x
originatingCountry String 3 Country of origin as (ISO 3166-1 alpha-3) country code
addressLine String 64 Street name
city String 64 City
subdivision String 3 Last three characters of ISO 3166-2:US state code
postCode String 15 Postal code
mrzData MRZ-DATA MRZ data, see table below
optionalData1 String 50 Optional field of MRZ line 1
optionalData2 String 50 Optional field of MRZ line 2
placeOfBirth String 255 Place of Birth
extractionMethod String 12 MRZ, OCR, BARCODE, BARCODE_OCR or NONE

MRZ-Data

Parameter Type Max. length Description
format String 8 MRP, TD1, TD2, CNIS, MRVA, MRVB or UNKNOWN
line1 String 50 MRZ line 1
line2 String 50 MRZ line 2
line3 String 50 MRZ line 3
idNumberValid BOOL True if ID number check digit is valid, otherwise false
dobValid BOOL True if date of birth check digit is valid, otherwise false
expiryDateValid BOOL True if date of expiry check digit is valid or not available, otherwise false
personalNumberValid BOOL True if personal number check digit is valid or not available, otherwise false
compositeValid BOOL True if composite check digit is valid, otherwise false

BAM Checkout

BAMCardInformation:

Parameter Type Max. length Description
cardType String 16 VISA, MASTER_CARD, AMERICAN_EXPRESS, CHINA_UNIONPAY, DINERS_CLUB, DISCOVER, JCB or STARBUCKS
cardNumber String 16 Full credit card number
cardNumberGrouped String 19 Grouped credit card number
cardNumberMasked String 19 First 6 and last 4 digits of the grouped credit card number, other digits are masked with "X"
cardExpiryMonth String 2 Month card expires if enabled and readable
CardExpiryYear String 2 Year card expires if enabled and readable
cardExpiryDate String 5 Date card expires in the format MM/yy if enabled and readable
cardCVV String 4 Entered CVV if enabled
cardHolderName String 100 Name of the card holder in capital letters if enabled and readable, or as entered if editable
cardSortCode String 8 Sort code in the format xx-xx-xx or xxxxxx if enabled, available and readable
cardAccountNumber String 8 Account number if enabled, available and readable
cardSortCodeValid BOOL True if sort code valid, otherwise false
cardAccountNumberValid BOOL True if account number code valid, otherwise false

Document Verification

No data returned.

FAQ

Using Dynamic Frameworks with React Native Sample App

Jumio SDK version 3.8.0 and newer use iProov dependencies that need need to be built as dynamic frameworks. Since React Native supports only static libraries, a pre-install hook has been added to ensure that pods added as dynamic_frameworks are actually built as dynamic frameworks, while all other pods are built as static libraries.

dynamic_frameworks = ['Socket.IO-Client-Swift', 'Starscream', 'iProov']
pre_install do |installer|
  installer.pod_targets.each do |pod|
    if !dynamic_frameworks.include?(pod.name)
      puts "Overriding the static_framework? method for #{pod.name}"
      def pod.static_framework?;
        true
      end
      def pod.build_type;
        Pod::BuildType.static_library
      end
    end
  end
end

Additionally, a post install hook needs to be added to the Podfile to ensure dependencies are build for distribution:

post_install do |installer|
    installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
          config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
      end
    end
end

Please refer to the iOS section of our DemoApp guide for additional details.

iOS Localization

After installing Cocoapods, please localize your iOS application using the languages provided at the following path:
ios -> Pods -> JumioMobileSDK -> JumioMobileSDK-3.9.0 -> Localizations -> xx.lproj

Localization

iProov String Keys

Please note that as of 3.8.0. the following keys have been added to the SDK:

  • "IProov_IntroFlash"
  • "IProov_IntroLa"
  • "IProov_PromptLivenessAlignFace"
  • "IProov_PromptLivenessNoTarget"
  • "IProov_PromptLivenessScanCompleted"
  • "IProov_PromptTooClose"
  • "IProov_PromptTooFar"

Make sure your podfile is up to date and that new pod versions are installed properly so your Localizable files include new strings. For more information, please refer to our Changelog and Transition Guide.

Support

Contact

If you have any questions regarding our implementation guide please contact Jumio Customer Service at [email protected] or https://support.jumio.com. The Jumio online helpdesk contains a wealth of information regarding our service including demo videos, product descriptions, FAQs and other things that may help to get you started with Jumio. Check it out at: https://support.jumio.com.

Licenses

The software contains third-party open source software. For more information, please see Android licenses and iOS licenses

This software is based in part on the work of the Independent JPEG Group.

Copyright

© Jumio Corp. 268 Lambert Avenue, Palo Alto, CA 94306

The source code and software available on this website (“Software”) is provided by Jumio Corp. or its affiliated group companies (“Jumio”) "as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall Jumio be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including but not limited to procurement of substitute goods or services, loss of use, data, profits, or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this Software, even if advised of the possibility of such damage. In any case, your use of this Software is subject to the terms and conditions that apply to your contractual relationship with Jumio. As regards Jumio’s privacy practices, please see our privacy notice available here: Privacy Policy.