Download BAM Checkout Mobile Implementation Guide for Android

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
BAM Checkout Mobile
Implementation Guide for Android
This is a reference manual and configuration guide for the BAM
Checkout Mobile product. It illustrates how to embed credit card
and optional ID scanning into your app.
Copyright:
Jumio Inc. 268 Lambert Avenue, Palo Alto, CA 94306
Contents
BAM Checkout Mobile Implementation Guide for Android ...................................................... 1
Contents.................................................................................................................................. 2
Release notes ...................................................................................................................... 3
Contact ................................................................................................................................ 3
Credit card scanning ................................................................................................................... 4
Setup ....................................................................................................................................... 4
Architecture ........................................................................................................................ 5
Integration .............................................................................................................................. 5
Initializing the SDK .............................................................................................................. 6
Configuring the SDK ............................................................................................................ 6
Localizing labels................................................................................................................... 8
Customizing look and feel ................................................................................................... 8
Displaying the SDK .............................................................................................................. 8
Retrieving information ........................................................................................................ 9
Credit Card Retrieval API ...................................................................................................... 12
Two-factor authentication .................................................................................................... 12
ID scanning ............................................................................................................................... 13
Setup ..................................................................................................................................... 13
Architecture ...................................................................................................................... 14
Integration ............................................................................................................................ 14
Initializing the SDK ............................................................................................................ 15
Configuring the SDK .......................................................................................................... 16
Localizing labels................................................................................................................. 17
Customizing look and feel ................................................................................................. 18
Displaying the SDK ............................................................................................................ 18
Retrieving information (Fastfill) ........................................................................................ 18
Two-factor authentication .................................................................................................... 21
2
Release notes
The current version of the Jumio SDK is 2.0.1. Visit BAM Checkout Mobile Release Notes to
see additions, changes and fixes included in each release.
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.
3
Credit card scanning
Setup
The requirements for the SDK are:
 Android 4.1 (API level 16) or higher
 ARMv7 processor with Neon, ARM64-v8a
 Internet connection
Required permissions are linked automatically by the SDK.
The following permissions are optional:
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
Note: On devices running Android Marshmallow (6.0) you need to acquire
android.permissions.CAMERA dynamically before initializing the SDK.
Use getRequiredPermissions to get a list of all required dangerous permissions.
public static String[] getRequiredPermissions();
Using the SDK requires an activity declaration in your AndroidManifest.xml.
<activity
android:theme="@style/Theme.Bam"
android:hardwareAccelerated="true"
android:name="com.jumio.bam.BamActivity"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"/>
You can specify your own theme (see Customizing look and feel chapter). The orientation
can be sensor based or locked with the attribute android:screenOrientation.
If you are using Proguard, add the following lines in its configuration.
-keep class com.jumio.** { *; }
-keep class jumio.** { *; }
4
Architecture
You can filter which architecture to use by specifying the abiFilters.
Note: The abiFilters command in the ndk closure affects the Google Play Store filtering.
defaultConfig {
ndk {
abiFilters "armeabi","armeabi-v7a","arm64-v8a","mips","mips64"","x86",
"x86_64"
}
}
The apk can be splitted based on the architecture if multiple apks should be uploaded to the
Google Play Store. Google Play Store manages to deliver the appropriate apk for the device.
splits {
abi {
enable true
reset()
include "armeabi","armeabi-v7a","arm64-v8a","mips","mips64","x86",
"x86_64"
universalApk false
}
}
Note: You get an UnsatisfiedLinkError, if the app and the CPU architecture do not match.
Integration
Use the SDK in your application by including the Maven repository with the following
build.gradle configuration in Android Studio:
repositories {
maven {
url 'http://mobile-sdk.jumio.com'
}
}
Dependencies
Dependency
Mandatory
x
x
x
x
x
com.jumio.android:core:2.0.1@aar
com.jumio.android:bam:2.0.1@aar
com.android.support:appcompat-v7:23.3.0
com.android.support:support-v4:23.3.0
com.squareup.okhttp:okhttp:2.7.5
com.jumio.android:javadoc:2.0.1
Description
Jumio Core library
Bam library
Android native library
Android native library
HTTP client
Android native library
If an optional module is not linked, the scan method is not available but the library size is
reduced.
5
Note: If you use credit card and ID scanning in your app, add the following dependencies:
Dependency
Mandatory
x
x
com.jumio.android:nv:2.0.1@aar
com.android.support:design:23.3.0
com.jumio.android:nv-barcode:2.0.1@aar
com.jumio.android:nv-mrz:2.0.1@aar
com.jumio.android:nv-nfc:2.0.1@aar
com.madgag.spongycastle:prov:1.54.0.0
net.sf.scuba:scuba-sc-android:0.0.9
com.jumio.android:nv-ocr:2.0.1@aar
Description
Netverify library
Android native library
US / CAN Barcode Scanning
MRZ Scanning
ePassport Scanning
ePassport Scanning
ePassport Scanning
Template Matcher
Applications implementing the SDK shall not run on rooted devices1. Use either the below
method or a self-devised check to prevent usage of SDK scanning functionality on rooted
devices.
BamSDK.isRooted();
Call the method isSupportedPlatform to check if the device is supported.
BamSDK.isSupportedPlatform();
Check the Android Studio sample projects to learn the most common use.
Initializing the SDK
To create an instance of the SDK, perform the following call right before presenting the SDK's
view controller.
BamSDK bamSDK = BamSDK.create(yourActivity, "YOURAPITOKEN", "YOURAPISECRET",
"YOURREPORTINGCRITERIA", JumioDataCenter.US);
Make sure that your merchant API token and API secret are correct, specify an instance
of your activity and provide a reference to identify the scans in your reports (max. 100
characters or null). If your merchant account is in the EU data center, use
JumioDataCenter.EU instead.
Note: Log into your Jumio merchant backend, and you can find your merchant API token and
API secret on the "Settings" page under "API credentials". We strongly recommend you to
store credentials outside your app.
Configuring the SDK
Note: User journey related configurations do not apply for the custom scan view.
1
In case of doubt, please consult a PCI QSA (Qualified Security Assessor).
6
Overwrite your specified reporting criteria to identify each scan attempt in your reports
(max. 100 characters).
bamSDK.setMerchantReportingCriteria("YOURREPORTINGCRITERIA");
To restrict supported card types, pass an ArrayList of CreditCardTypes to the
setSupportedCreditCardTypes method.
ArrayList<CreditCardType> creditCardTypes = new ArrayList<CreditCardType>();
creditCardTypes.add(CreditCardType.VISA);
creditCardTypes.add(CreditCardType.MASTER_CARD);
bamSDK.setSupportedCreditCardTypes(creditCardTypes);
You can enable the sort code and account number.
The recognition of card holder name, manual entry, expiry recognition and CVV entry are
enabled by default and can be disabled.
The user can edit the recognized expiry date if setExpiryEditable is enabled.
bamSDK.setSortCodeAndAccountNumberRequired(true)
bamSDK.setCardHolderNameRequired(false);
bamSDK.setManualEntryEnabled(false);
bamSDK.setExpiryRequired(false);
bamSDK.setCvvRequired(false);
bamSDK.setExpiryEditable(true);
Use setName to pass first and last name for name match if card holder recognition is enabled.
The user can edit the recognized card holder name if setCardHolderNameEditable is enabled.
Note: Levenshtein distance is used for name match. You can obtain the match result in the
BamCardInformation class.
bamSDK.setName("FIRSTNAME LASTNAME");
bamSDK.setCardHolderNameEditable(true);
You can set a short vibration and sound effect to notify the user that the card has been
detected.
bamSDK.setVibrationEffectEnabled(true);
bamSDK.setSoundEffect(R.raw.yourSoundFile);
Use setCameraPosition to configure the default camera (front or back).
bamSDK.setCameraPosition(JumioCameraPosition.FRONT);
To enable flashlight after SDK is started, use the following method.
bamSDK.setEnableFlashOnScanStart(true);
To show the unmasked card number during the user journey, disable the following setting.
bamSDK.setCardNumberMaskingEnabled(false);
7
You can add custom fields to "Manual entry" and the confirmation view (keyboard entry or
predefined values).
bamSDK.addCustomField("idZipCode", "Zip code", "94306",
InputType.TYPE_CLASS_NUMBER, "[0-9]{5}");
// addCustomField(String id, String title, String value, int inputType, String
regularExpression);
bamSDK.addCustomField("idState", "State", "Choose state", yourArrayList, false, "-no value --");
// addCustomField(String id, String title, String hint, ArrayList<String> values,
boolean required, String resetValueText);
Use the following method to support the Adyen client-side-encryption. To successfully
create an encrypted data object, enable expiry date, CVC and card holder name.
Note: Transmission of the encrypted object to the Adyen payment gateway is not part of the
SDK.
bamSDK.setAdyenPublicKey("ADYENPUBLICKEY");
Localizing labels
All label texts and button titles can be changed and localized using the standard strings.xml
file. Just add the Jumio strings (see sample project under /res/values/strings.xml) and
adapt them to your required language.
Customizing look and feel
The SDK can be customized to fit your application's look and feel by specifying Theme.Bam as a
parent style of your own theme. The individual customizing items can be found in attrs.xml.
Displaying the SDK
To show the SDK, call the respective method below within your activity or fragment.
Activity: bamSDK.start();
Fragment: startActivityForResult(bamSDK.getIntent(),
BamSDK.REQUEST_CODE);
Note: The default request code is 100. To use another code, override the public static
variable BamSDK.REQUEST_CODE before displaying the SDK.
Custom scan view
To use the custom scan view with a plain card scanning user interface, specify an instance of
your class which implements the BamCustomScanInterface and provide an instance of the
class BamCustomScanView. You will receive a BamCustomScanPresenter object.
Add yourBamCustomScanView to your layout and specify desired layout attributes using either
8



a certain width, and height as wrap_content
or a certain height, and width as wrap_content
or width and height as match_parent (full screen).
Using width or height as wrap_content, the BamCustomScanView attribute ratio needs to be
set to any float value between screen width/screen height (e.g. portrait 720/1280 = ~ 0.6)
and 4:3 (1.33). If yourBamCustomScanView is added to your layout via xml, specify the below
namespace to access the custom attribute yourNameSpace:ratio.
BamCustomScanPresenter bamCustomScanPresenter =
bamSDK.start(yourBamCustomScanInterface, yourBamCustomScanView);
Upon onBamCameraAvailable within yourBamCustomScanInterface, you can perform the
following actions using the bamCustomScanPresenter:
 Check if front and back camera available
 Check if front camera used
 Switch between front and back camera
 Check if flash available
 Check if flash enabled
 Switch flash mode (on or off)
 Stop card scanning
public
public
public
public
public
public
public
boolean hasMultipleCameras();
boolean isCameraFrontFacing();
void switchCamera();
boolean hasFlash();
boolean isFlashOn();
void toggleFlash();
void stopScan();
Call onActivityPause in your activity upon onPause.
public void onActivityPause();
Retrieving information
Implement the standard method onActivityResult in your activity for successful scans and
user cancellation notifications. Call bamSDK.destroy() once you received the result.
You receive a Jumio scan reference for each try, if the Internet connection is available. For
offline scans an empty String is added to the Arraylist scanReferences.
Call cardInformation.clear() after processing the card information to make sure no
sensitive data remains in the device's memory.
The parameter EXTRA_ERROR_CODE contains the user cancellation reason.
Note: The error codes 200, 210, 220, 240, 250, 260 and 310 will be returned.
9
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == BamSDK.REQUEST_CODE) {
// ArrayList<String> scanReferences =
data.getStringArrayListExtra(BamSDK.EXTRA_SCAN_ATTEMPTS);
if (resultCode == Activity.RESULT_OK) {
// OBTAIN PARAMETERS HERE
// YOURCODE
// cardInformation.clear();
}
else if (resultCode == Activity.RESULT_CANCELED) {
// int errorCode = data.getIntExtra(BamSDK.EXTRA_ERROR_CODE, 0);
// String errorMessage =
data.getStringExtra(BamSDK.EXTRA_ERROR_MESSAGE);
// YOURCODE
}
// bamSDK.destroy();
}
}
Custom scan view
Instead of using the standard method onActivityResult, implement the following methods
within yourBamCustomScanInterface for camera, extraction and error notifications. Call
bamCustomScanPresenter.clearSDK() and bamSDK.destroy() once you received the result.
Upon onBamError, you can show the error message and/or call
bamCustomScanPresenter.retryScan() if retryPossible.
Note: The error codes 200, 210, 220, 240, 260, 300, 310 and 320 will be returned.
@Override
public void onBamCameraAvailable() {
// YOURCODE
}
@Override
public void onBamExtractionStarted() {
// YOURCODE like showing a progress indicator
}
@Override
public void onBamExtractionFinished(BamCardInformation cardInformation,
ArrayList<String> scanReferences) {
// YOURCODE
// cardInformation.clear();
// bamCustomScanPresenter.clearSDK();
// bamSDK.destroy();
}
@Override
public void onBamError(int errorCode, String errorMessage, boolean retryPossible,
ArrayList<String> scanReferences) {
// YOURCODE like showing the error message and/or calling retry if
retryPossible
// bamCustomScanPresenter.retryScan();
// bamCustomScanPresenter.clearSDK();
// bamSDK.destroy();
}
10
Class BamCardInformation
Parameter
Type
cardType
CreditC
ardType
cardNumber
cardNumberGrouped
cardNumberMasked
char[]
char[]
char[]
16
19
19
cardNumberManuallyEntered
cardExpiryMonth
cardExpiryYear
cardExpiryDate
boolean
char[]
char[]
char[]
2
2
5
cardCVV
cardHolderName
char[]
char[]
4
100
cardSortCode
char[]
8
cardAccountNumber
cardSortCodeValid
cardAccountNumberValid
nameMatch
char[]
boolean
boolean
boolean
8
nameDistance
encryptedAdyenString
int
char[]
Method
clear
getCustomField
Max.
length
Description
AMERICAN_EXPRESS, CHINA_UNIONPAY,
DINERS_CLUB, DISCOVER, JCB, MASTER_CARD, VISA
or STARBUCKS
Parameter type
-
Return type
-
String
String
Full credit card number
Grouped credit card number
First 6 and last 4 digits of the grouped credit card
number, other digits are masked with "X"
True if manual entry, otherwise false
Month card expires if enabled and readable
Year card expires if enabled and readable
Date card expires in the format MM/yy if enabled and
readable
Entered CVV if enabled
Name of the card holder in capital letters if enabled and
readable, or as entered if editable
Sort code in the format xx-xx-xx or xxxxxx if enabled,
available and readable
Account number if enabled, available and readable
True if sort code valid, otherwise false
True if account number code valid, otherwise false
True if successful name match (nameDistance <= 20 %
of name length), otherwise false
Levenshtein distance for name match, otherwise -1
Encrypted ADYEN string
Description
Clear card information
Get entered value for added custom field
Error codes
Code
200
210
220
240
250
260
280
300
310
320
Message
Authentication failed
Description
API credentials invalid, retry impossible
Scanning not available at this time, please contact the
app vendor
Canceled by end-user
The camera is currently not available
Resources cannot be loaded, retry
impossible
No error occurred
Camera cannot be initialized, retry
impossible
End-to-end encryption key not valid
anymore, retry impossible
Retry possible
Cancellation triggered automatically
Retry possible
Certificate not valid anymore. Please update your
application.
Your card type is not accepted
Background execution is not supported
Your card is expired
11
Credit Card Retrieval API
You can implement RESTful HTTP GET APIs to retrieve credit card image and data for a
specific scan. Find the Implementation Guide at the link below.
http://www.jumio.com/implementation-guides/credit-card-retrieval-api/.
Two-factor authentication
If you want to enable two-factor authentication for your Jumio merchant backend please
contact [email protected]. Once enabled, users will be guided through the setup upon
their first login to obtain a security code using the "Google Authenticator" app.
12
ID scanning
Setup
The requirements for the SDK are:
 Android 4.1 (API Level 16) or higher
 ARMv7 processor with Neon, ARM64-v8a
 Internet connection
Required permissions are linked automatically by the SDK.
The following permissions are optional:
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
Note: On devices running Android Marshmallow (6.0) you need to acquire
android.permissions.CAMERA dynamically before initializing the SDK.
Use getRequiredPermissions to get a list of all required dangerous permissions.
public static String[] getRequiredPermissions();
Using the SDK requires an activity declaration in your AndroidManifest.xml.
<activity
android:theme="@style/Theme.Netverify"
android:hardwareAccelerated="true"
android:name="com.jumio.nv.NetverifyActivity"
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"/>
You can specify your own theme (see Customizing look and feel chapter). The orientation is
restricted on phones, and sensor based or locked with the attribute
android:screenOrientation on tablets.
If you are using Proguard, add the following lines in its configuration.
-keep class com.jumio.** { *; }
-keep class jumio.** { *; }
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.squareup.okhttp.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
-dontnote
If you are using ePassport scanning, following lines are needed:
13
-keep
-keep
-keep
-keep
-keep
class
class
class
class
class
-dontwarn
-dontwarn
-dontwarn
-dontwarn
net.sf.scuba.smartcards.IsoDepCardService {*;}
org.jmrtd.** { *; }
net.sf.scuba.** {*;}
org.spongycastle.** {*;}
org.ejbca.** {*;}
java.nio.**
org.codehaus.**
org.ejbca.**
org.spongycastle.**
Architecture
You can filter which architecture to use by specifying the abiFilters.
Note: The abiFilters command in the ndk closure affects the Google Play Store filtering.
defaultConfig {
ndk {
abiFilters "armeabi","armeabi-v7a","arm64-v8a","mips","mips64","x86",
"x86_64"
}
}
The apk can be splitted based on the architecture if multiple apks should be uploaded to the
Google Play Store. Google Play Store manages to deliver the appropriate apk for the device.
splits {
abi {
enable true
reset()
include "armeabi","armeabi-v7a","arm64-v8a","mips","mips64","x86",
"x86_64"
universalApk false
}
}
Note: You get an UnsatisfiedLinkError, if the app and the CPU architecture do not match.
Integration
Use the SDK in your application by including the Maven repository with the following
build.gradle configuration in Android Studio:
repositories {
maven {
url 'http://mobile-sdk.jumio.com'
}
}
14
Dependencies
Dependency
Mandatory
x
x
x
x
x
x
com.jumio.android:core:2.0.1@aar
com.jumio.android:nv:2.0.1@aar
com.android.support:appcompat-v7:23.3.0
com.android.support:support-v4:23.3.0
com.android.support:design:23.3.0
com.squareup.okhttp:okhttp:2.7.5
com.jumio.android:javadoc:2.0.1
com.jumio.android:nv-barcode:2.0.1@aar
com.jumio.android:nv-mrz:2.0.1@aar
com.jumio.android:nv-nfc:2.0.1@aar
com.madgag.spongycastle:prov:1.54.0.0
net.sf.scuba:scuba-sc-android:0.0.9
com.jumio.android:nv-ocr:2.0.1@aar
Description
Jumio Core library
Netverify library
Android native library
Android native library
Android native library
HTTP client
Android native library
US / CAN Barcode Scanning
MRZ Scanning
ePassport Scanning
ePassport Scanning
ePassport Scanning
Template Matcher
If an optional module is not linked, the scan method is not available but the library size is
reduced.
Note: If you use Netverify and BAM Checkout in your app, add the following dependency:
compile "com.jumio.android:bam:2.0.1@aar"
Call the method isSupportedPlatform to check if the device is supported.
NetverifySDK.isSupportedPlatform();
Check the Android Studio sample projects to learn the most common use.
Initializing the SDK
To create an instance for the SDK, perform the following call as soon as your activity is
initialized.
NetverifySDK netverifySDK = NetverifySDK.create(yourActivity, "YOURAPITOKEN",
"YOURAPISECRET", JumioDataCenter.US);
Make sure that your merchant API token and API secret are correct and specify an instance
of your activity. If your merchant account is in the EU data center, use JumioDataCenter.EU
instead.
Note: Log into your Jumio merchant backend, and you can find your merchant API token and
API secret on the "Settings" page under "API credentials". We strongly recommend you to
store credentials outside your app.
15
Configuring the SDK
Use the following method to pass first and last name for name match.
Note: Levenshtein distance is used for name match. You can obtain the match result in the
NetverifyDocumentData class.
netverifySDK.setName("FIRSTNAME LASTNAME");
User journey
Use setCameraPosition to configure the default camera (front or back).
netverifySDK.setCameraPosition(JumioCameraPosition.FRONT);
You can specify issuing country (ISO 3166-1 alpha-3 country code), ID type and/or document
variant to skip their selection during the scanning process.
Note: Fastfill does not support paper IDs, except German ID cards.
netverifySDK.setPreselectedCountry("AUT");
netverifySDK.setPreselectedDocumentTypes(NVDocumentType.PASSPORT);
netverifySDK.setPreselectedDocumentVariant(NVDocumentVariant.PLASTIC);
To pre-select more than one ID type use the following Array:
ArrayList<NVDocumentType> documentTypes = new ArrayList<>();
documentTypes.add(NVDocumentType.PASSPORT);
documentTypes.add(NVDocumentType.DRIVER_LICENSE);
netverifySDK.setPreselectedDocumentTypes(documentTypes);
Use the following method to disable the help screen before scanning:
netverifySDK.setShowHelpBeforeScan(false);
Transaction identifiers
The merchant scan reference allows you to identify the scan (max. 100 characters).
Note: Must not contain sensitive data like PII (Personally Identifiable Information) or account
login.
netverifySDK.setMerchantScanReference("YOURSCANREFERENCE");
Use the following property to identify the scan in your reports (max. 100 characters).
netverifySDK.setMerchantReportingCriteria("YOURREPORTINGCRITERIA");
You can also set a customer identifier (max. 100 characters).
Note: The customer ID should not contain sensitive data like PII (Personally Identifiable
Information) or account login.
netverifySDK.setCustomerId("CUSTOMERID");
16
Fastfill only
To limit data extraction to be done on device only, enable setDataExtractionOnMobileOnly.
netverifySDK.setDataExtractionOnMobileOnly(true);
ID verification
Enable ID verification to receive a verification status and verified data positions. A callback
URL can be specified for individual transactions. This setting overrides your Jumio merchant
settings.
Note: Not possible for accounts configured as Fastfill only.
netverifySDK.setRequireVerification(true);
netverifySDK.setCallbackUrl("YOURCALLBACKURL");
You can enable face match during the ID verification for a specific transaction (in case it is
enabled for your account).
netverifySDK.setRequireFaceMatch(true);
ePassport
Use setEnableEpassport to read the NFC chip of an ePassport.
netverifySDK.setEnableEpassport (true);
Analytics Service
Use the following setting to explicitly send debug information to Jumio.
netverifySDK.setSendDebugInfoToJumio(true);
Note: Only set this property to true if you are asked by Jumio Customer Service.
You receive a list of the current DebugSessionID by using getDebugID. This method can be
called either after initializing or before dismissing the SDK.
netverifySDK.getDebugID();
Localizing labels
All label texts and button titles can be changed and localized using the standard strings.xml
file. Just add the Jumio strings (see sample project under /res/values/strings.xml) and
adapt them to your required language.
17
Customizing look and feel
The SDK can be customized to fit your application’s look and feel by specifying
Theme.Netverify as a parent style of your own theme. The individual customizing items can
be found in attrs.xml.
Displaying the SDK
To show the SDK, call the respective method below within your activity or fragment.
Activity: netverifySDK.start();
Fragment: startActivityForResult(netverifySDK.getIntent(),
NetverifySDK.REQUEST_CODE);
Note: The default request code is 200. To use another code, override the public static
variable NetverifySDK.REQUEST_CODE before displaying the SDK.
Retrieving information (Fastfill)
Implement the standard onActivityResult method in your activity or fragment for successful
scans (Activity.RESULT_OK) and user cancellation notifications (Activity.RESULT_CANCELED).
Call netverifySDK.destroy() once you received the result.
Note: Upon RESULT_CODE_BACK_WITH_SUCCESS, the submission was successful and the back
button was pressed on the final screen.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == NetverifySDK.REQUEST_CODE) {
if (resultCode == Activity.RESULT_OK) {
// OBTAIN PARAMETERS HERE
// YOURCODE
} else if (resultCode == Activity.RESULT_CANCELED) {
// String scanReference =
data.getStringExtra(NetverifySDK.EXTRA_SCAN_REFERENCE);
// int errorCode =
data.getIntExtra(NetverifySDK.EXTRA_ERROR_CODE, 0);
// String errorMessage =
data.getStringExtra(NetverifySDK.EXTRA_ERROR_MESSAGE);
// YOURCODE
}
// netverifySDK.destroy();
}
}
Class NetverifyDocumentData
Parameter
Type
selectedCountry
String
selectedDocumentType
NVDocumentType
Max.
length
3
18
Description
ISO 3166-1 alpha-3
country code as provided
or selected
PASSPORT,
DRIVER_LICENSE or
Extraction (*1)
IDENTITY_CARD as
provided or selected
Identification number of
the document
Personal number of the
document
Date of issue
Date of expiry
idNumber
String
100
personalNumber
String
14
issuingDate
expiryDate
Date
Date
issuingCountry
String
3
lastName
String
100
firstName
String
100
middleName
String
100
dob
Date
First name of the
customer
Middle name of the
customer
Date of birth
gender
NVGender
Gender M or F
originatingCountry
String
3
addressLine
String
64
Country of origin as ISO
3166-1 alpha-3 country
code
Street name
city
String
64
City
subdivision
String
3
postCode
String
15
Last three characters of
ISO 3166-2:US state code
Postal code
mrzData
optionalData1
NetverifyMrzData
String
50
optionalData2
String
50
nameMatch
boolean
nameDistance
int
livenessDetected
boolean
placeOfBirth
extractionMethod
String
NVExtractionMethod
ePassportStatus
EPassportStatus
255
19
Country of issue as ISO
3166-1 alpha-3 country
code
Last name of the customer
MRZ data, see table below
Optional field of MRZ line
1
Optional field of MRZ line
2
True if successful name
match (nameDistance <=
20 % of name length),
otherwise false
Levenshtein distance for
name match, otherwise -1
True if face match enabled
for ID verification and
liveness detected
successfully during
scanning, otherwise false;
returns null if not
performed
Place of Birth
Extraction method used
during scanning
Verification status of an
MRZ, bar code,
OCR
MRZ (MRP)
Bar code, OCR
MRZ, bar code,
OCR
MRZ, bar code,
OCR
MRZ, bar code,
OCR
MRZ, bar code,
OCR
Bar code, OCR
MRZ, bar code,
OCR
MRZ, bar code,
OCR
MRZ
Bar code, OCR
(except passport)
Bar code, OCR
(except passport)
Bar code, OCR
(except passport)
Bar code, OCR
(except passport)
MRZ
MRZ (TD1)
MRZ (TD1, TD2,
MRV_A, MRV_B)
MRZ (ePassport)
MRZ, bar code,
OCR
ePassport scan
VERIFIED (ePassport
scanned and
authenticated), DENIED
(ePassport scanned and
not authenticated) or
NOT_AVAILABLE (no NFC
on device or ePassport
feature disabled),
NOT_PERFORMED (NFC
disabled on device)
(*1) Global Netverify settings like accepted/supported IDs and data settings do not apply.
Fastfill supported IDs: http://www.jumio.com/fastfill/supported-countries/
MRZ: Value is returned
 if available on the ID
 if readable
 as readable (can be invalid)
Bar code: Value is returned if available within the specific bar code
OCR: Value is returned
 if available on the ID
 if readable
 as readable (can be invalid)
 if on the ID's front side, except plastic German ID cards
 if the region of the selected country fits to the region of the ID (United States, Australia, Asia, Canada,
America, Europe, Africa)
Class NetverifyMrzData
Parameter
Type
Max.
length
Description
format
NVMRZFormat
line1
String
50
MRZ line 1
line2
String
50
MRZ line 2
line3
idNumberValid
String
boolean
50
MRZ line 3
True if ID number check digit
is valid, otherwise false
dobValid
boolean
True if date of birth check
digit is valid, otherwise false
expiryDateValid
boolean
personalNumberValid
boolean
True if date of expiry check
digit is valid or not available,
otherwise false
True if personal number check
digit is valid or not available,
Extraction
MRP, TD1, TD2, CNIS
MRV_A or MRV_B
20
MRP, TD1,
TD2, CNIS,
MRV_A,
MRV_B
MRP, TD1,
TD2, CNIS,
MRV_A,
MRV_B
TD1
MRP, TD1,
TD2, CNIS,
MRV_A,
MRV_B
MRP, TD1,
TD2, CNIS,
MRV_A,
MRV_B
MRP, TD1,
TD2, MRV_A,
MRV_B
MRP
compositeValid
otherwise false
True if composite check digit
is valid, otherwise false
boolean
MRP, TD1,
TD2, CNIS
Error codes
Code
100
110
130
140
150
160
200
210
220
230
240
250
260
270
280
Message
We have encountered a network communication problem
Description
Retry possible, user decided to cancel
Authentication failed
API credentials invalid, retry
impossible
No Internet connection available
Scanning not available this time, please contact the app
vendor
Cancelled by end-user
The camera is currently not available
Retry possible, user decided to cancel
Resources cannot be loaded, retry
impossible
No error occurred
Camera cannot be initialized, retry
impossible
App is in the background and persisted
End-to-end encryption key not valid
anymore, retry impossible
Saving instance is not supported
Certificate not valid anymore. Please update your
application.
Two-factor authentication
If you want to enable two-factor authentication for your Jumio merchant backend please
contact [email protected]. Once enabled, users will be guided through the setup upon
their first login to obtain a security code using the "Google Authenticator" app.
21