Manuales Técnicos

INTEGRACIÓN ANDROID & iOS

solución de Identificación & Servicios Biométricos


    Control De Versión

  • Versión : 2.8
  • Autor : Jeyson Duarte
  • Organización : ADO Technologies

La información comprendida en esta descripción es confidencial y pertenece a ADO Technologies SAS & Scanovate.


RECOMENDACIONES

Para una correcta interacción con el SDK, es necesario tener en cuenta las siguientes recomendaciones, al momento de interactuar con la app:

Acceso a internet
  1. Evitar el uso de redes WiFi empresariales o corporativas, regularte se encuentran con bloqueos sobre puertos, es necesario garantizar la libre navegación del dispositivo en internet.
  2. La velocidad mínima recomendada es de 5 Megabytes.
Liveness
  1. El dispositivo móvil deber ser colocado a la altura de los ojos, asegurándose que el rostro entre en el área de identificación.
  2. Se necesita contar con buena iluminación, que permita al software identificar correctamente las orejas, pomulos, mentón, nariz y ojos del usuario a identificar.
  3. Se debe evitar el uso de gafas, incluso si se tratan de lentes de formula.
  4. Se debe evitar el uso de gorras, sombreros, bufandas, audífonos y en general accesorios que impidan observar las características morfológicas del rostro y cabeza.
Documento
  1. La foto del documento es tomada en modo horizontal.
  2. El documento de identidad debe de estar en buenas condiciones, es decir que no tenga manchas, rayas o polvo.
  3. Se debe retirar del documento de identificación cualquier tipo de protección sin importar si la misma es incolora.
  4. Se debe evitar ángulos en los que el documento por el tipo de hologramas que contiene genere brillos excesivos.

INTEGRACIÓN SDK ANDROID

INVOCACIÓN

Requisitos Mínimos
  1. Acceso sin restricciones a internet
  2. Android SDK versión 21 (Android 5.0) o posterior
  3. Android SDK versión 21 (Android 5.0) o posterior
  4. Cámara frontal mínimo 5 Mpx
  5. Cámara posterior mínimo 7 Mpx
  6. Procesador ARMv7 y superior
  7. Soporte OpenGL ES 2.0
Como usar el Kit de desarrollo
  1. Cree un nuevo proyecto de aplicación para Android en su Android Studio.
  2. En su proyecto, Android crea un módulo de "aplicación" de forma predeterminada. Dentro de este módulo, encontrará un directorio llamado "libs". La ruta predeterminada del directorio libs es "YourProjectName / app / libs /" Copie los archivos AAR con este proyecto al directorio libs:
  3. El módulo de la aplicación también contiene un script de configuración llamado build.gradle. La ruta predeterminada a este archivo es "YourProjectName / app / src / build.gradle" Debe configurar su proyecto de manera que:
    • La versión mínima de Android SDK será 19.
    • Su proyecto incluirá las bibliotecas de terceros y los archivos AAR que ha copiado en el directorio libs.
  4. Para configurar estos requisitos, agregue el siguiente fragmento de código a su archivo build.gradle.
  5.                                             apply plugin: 'com.android.application'
                                                        android {
                                                            compileOptions {
                                                                    sourceCompatibility 1.8
                                                                    targetCompatibility 1.8
                                                                }
                                                            compileSdkVersion 28
                                                            defaultConfig {
                                                                applicationId "com.mabel_tech.scanovate_colombia_sdk_demo"
                                                                minSdkVersion 19
                                                                targetSdkVersion 28
                                                                versionCode 1
                                                                versionName "1.0"
                                                                testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
                                                            }
                                                            buildTypes {
                                                                release {
                                                                    minifyEnabled false
                                                                    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
                                                                }
                                                            }
                                                        }
                                                        allprojects {
                                                            repositories {
                                                                jcenter()
                                                                maven {
                                                                    url "https://maven.google.com"
                                                                }
                                                                maven {
                                                                    url 'http://maven.microblink.com'
                                                                }
                                                                flatDir {
                                                                    dirs 'libs'
                                                                }
                                                            }
                                                        }
                                                        dependencies {
                                                            implementation fileTree(dir: 'libs', include: ['*.jar'])
                                                            implementation 'com.android.support:appcompat-v7:28.0.0'
                                                            implementation 'com.android.support.constraint:constraint-layout:1.1.3'
                                                            implementation 'com.android.support:support-v4:28.0.0'
                                                            testImplementation 'junit:junit:4.12'
                                                            androidTestImplementation 'com.android.support.test:runner:1.0.2'
                                                            androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
                                                            implementation(name: 'scanovate_colombia', ext: 'aar')
                                                            implementation(name: 'ScanovateManualCapture_1_0_1', ext: 'aar')
                                                            implementation(name: 'libScanovateImagingHybridLiveness_4_1_0', ext: 'aar')
                                                            implementation 'com.google.android.gms:play-services-vision:17.0.2'
                                                            implementation('io.socket:socket.io-client:1.0.0') {
                                                            // excluding org.json which is provided by Android
                                                            exclude group: 'org.json', module: 'json'
                                                        }
                                                        implementation 'com.squareup.retrofit2:retrofit:2.3.0'
                                                            implementation 'com.squareup.okhttp3:logging-interceptor:3.14.0'
                                                            implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
                                                            implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
                                                    }
                                        

Método Invocación
                                public void capture() {​​​​​​​​
                                    ScanovateSdk.start(this,
                                        documentType: "String",
                                        productId: Int,
                                        projectName_Sdk: "String",
                                        apiKey_Sdk: "String",
                                        Url_Sdk: "String",
                                        numberIdentification: "String",
                                        verification: Bool,
                                        userName: "String",
                                        password: "String",
										riskId: Int,
                                        new ScanovateHandler() {​​​​​​​​
                                            @Override
                                            public void onSuccess(CloseResponse response, int code, String uuidDevice) {​​​​​​​​
                                                progress.show();
                                                String calificacion = response.getExtras().getStateName();
                                                btn_verificar.setVisibility(View.INVISIBLE);
                                                btn_enrolar.setVisibility(View.INVISIBLE);
                                                if (verification) {​​​​​​​​
                                                    progress.dismiss();
                                                    tv.setText("Resultado de Transacción: " + calificacion);
                                                }​​​​​​​​ else {​​​​​​​​
                                                    evaluateTransaction(response.getTransactionId());
                                                }​​​​​​​​
                                            }​​​​​​​​
                                            @Override
                                            public void onFailure(CloseResponse closeResponse) {​​​​​​​​
                                                String calificacion = closeResponse.getExtras().getStateName() + " " + closeResponse.getExtras().getAdditionalProp1();
                                                btn_verificar.setVisibility(View.INVISIBLE);
                                                btn_enrolar.setVisibility(View.INVISIBLE);
                                                progress.dismiss();
                                                tv.setText("Resultado de Transacción: " + calificacion);
                                            }​​​​​​​​
                                    }​​​​​​​​);
                                }​​​​​​​​
                            

Para esta forma de invocación se requiere enviar el tipo (documentType) y número (identification) del cliente que se quiere verificar, al igual que poner en true el parámetro “validation”.

DESCRIPCIÓN DE PARAMETROS
Nombre Tipo Descripción
documentType String Id del tipo de documento.
ProductId Integer Id del producto con el cual se va a realizar el proceso de valdiación de identidad
projectName_Sdk String Nombre del projecto administrado por la plataforma ADO.
apiKey_Sdk String Cadena alfa numérica creada y administrada desde la plataforma de ADO.
Url_Sdk String Es la URL suministrada por ADO como plataforma para la prestación del servicio, lo que define el sitio final de interacción del SDK con un sitio web especifico.
numberIdentification String Numero de Identificación con el que se va a verificar un clienbte previemante enrolado.
verification Boolean Parametros que define la rutina que se va realizar, si este es false, se hara la rutina de enrolamiento y si es true se realizar la rutina de Verificación.
userName String Nombre de usuario administrado por ADO, este paramentro debe ser enviado cuando el OAuth este encendido para obtener el Token.
password String Cadena alfanumerica creada y administrada desde la plataforma ADO, este paramentro debe ser enviado cuando el OAuth este encendido para obtener el Token.
riskId Int Identificador del nivel de riesgo de la transacción, en caso de no especificarlo se tomara el nivel 1 por defecto.

INTEGRACIÓN SDK iOS

INVOCACIÓN

Requisitos Mínimos
  1. Acceso sin restricciones a internet.
  2. iOS versión 11.0 y posterior.
  3. iPhone 6 y posteriores.
  4. Permisos de acceso a cámara frontal y posterior.
Como usar el kit de desarrollo
  1. Agregue "ScanovateHybridLiveness.framework”, "ScanovateManualCapture.framework” y “SMSDK.framework” a los binarios incrustados, esto lo agregará automáticamente también a enlace binario con bibliotecas.
  2. Agregue “lottie-ios”, “SheetyColors” y “Alamofire” a su proyecto a través de PodFile:
  3.                                                 # Uncomment the next line to define a global platform for your project
                                                    # platform :ios, '9.0'
                                                    target 'SMSDKTest' do
                                                    # Comment the next line if you don't want to use dynamic frameworks
                                                    use_frameworks!
                                                    # Pods for SMSDKTest
                                                    pod 'Socket.IO-Client-Swift', '~> 15.2.0'
                                                    pod 'lottie-ios', '2.5.2'
                                                    pod 'Alamofire', '4.8.2'
                                                    pod 'SheetyColors'
                                                    end
                                    
  4. Cree una clase “TestViewController“ de tipo “UIViewController” que se ajuste a “SMDelegate” para llamar la función de lanzamiento de la librería “SMSDK” llamada “callFaceViewController” como se muestra a continuación dependiendo del método a invocar.

Método de Invocación
                                func callFaceViewController(documentType: String) {​​​​​
                                    let params = SMParams(documentType: documentType,
                                        productId: String,
                                        projectName: String,
                                        apiKey: String,
                                        urlSdk: String,
                                        identification: String,
                                        validation: Boolean,
                                        userName: String,
                                        password: String,
										riskId: int)
                                    let smManagerVC = SMManager.initWith(delegate: self, params: params)
                                        present(smManagerVC, animated: true, completion: nil)
                                }​​​​​
                            

Las variables de enrolamineto deben ser reemplazados por los suministrados.


Para esta forma de invocación se requiere enviar el tipo (documentType) y número (identification) del cliente que se quiere verificar, al igual que poner en true el parámetro “validation”.

En cualquiera de los dos escenarios se requiere implementar la siguiente extensión.

                                    extension TestViewController: SMDelegate {​​​​​
                                        func completedWithResult(result: Bool, response: TransactionResponse?) {​​​​​
                                            dismiss(animated: true) {​​​​​
                                                if result {​​​​​
                                                    self.showAlert(title: "Resultado", message: "Firstname: \(response?.FirstName ?? "")\nSurname: \(response?.FirstSurname ?? "")\nTransaction ID: \(response?.TransactionId ?? "")\nEstado: \(response?.Extras?.StateName ?? "")\nDescripción: \(response?.Extras?.additionalProp1 ?? "")\nTransacción: \(response?.TransactionTypeName ?? "")")
                                                }​​​else {​​​​​
                                                    self.showAlert(title: "Resultado", message: "Firstname: \(response?.FirstName ?? "")\nSurname: \(response?.FirstSurname ?? "")\nTransaction ID: \(response?.TransactionId ?? "")\nEstado: \(response?.Extras?.StateName ?? "")\nDescripción: \(response?.Extras?.additionalProp1 ?? "")\nTransacción: \(response?.TransactionTypeName ?? "")")
                                                }​​​​​
                                            }​​​​​
                                        }​​​​​
                                    }​​​​​
                            

DESCRIPCIÓN DE PARAMETROS
Nombre Tipo Descripción
documentType String Id del tipo de documento.
ProductId Integer Id del producto con el cual se va a realizar el proceso de valdiación de identidad
projectName_Sdk String Nombre del projecto administrado por la plataforma ADO.
apiKey_Sdk String Cadena alfa numérica creada y administrada desde la plataforma de ADO.
Url_Sdk String Es la URL suministrada por ADO como plataforma para la prestación del servicio, lo que define el sitio final de interacción del SDK con un sitio web especifico.
numberIdentification String Numero de Identificación con el que se va a verificar un clienbte previemante enrolado.
verification Boolean Parametros que define la rutina que se va realizar, si este es false, se hara la rutina de enrolamiento y si es true se realizar la rutina de Verificación.
userName String Nombre de usuario administrado por ADO, este paramentro debe ser enviado cuando el OAuth este encendido para obtener el Token.
password String Cadena alfanumerica creada y administrada desde la plataforma ADO, este paramentro debe ser enviado cuando el OAuth este encendido para obtener el Token.
riskId Int Identificador del nivel de riesgo de la transacción, en caso de no especificarlo se tomara el nivel 1 por defecto.

RETORNO DE RESULTADOS

Al finalizar cualquiera de las invocaciones documentadas en los apartado de INVOCACIÓN ANDROID o iOS y siempre y cuando el usuario final haya finalizado con la totalidad de imágenes solicitadas, cliente recibirá en su URL CallBack un objeto JSON con la siguiente estructura.

RESPUESTA
CÓDIGO RESPUESTA DESCRIPCIÓN
200 {
     "Uid": "String",
     "StartingDate": "String",
     "CreationDate": "String",
     "CreationIP": "String",
     "DocumentType": "String",
     "IdNumber": "String",
     "FirstName": "String",
     "SecondName": "String",
     "FirstSurname": "String",
     "SecondSurname": "String",
     "Gender": "String",
     "BirthDate": "String",
     "Street": "String",
     "CedulateCondition": "String",
     "Spouse": "String",
     "Home": "String",
     "MaritalStatus": "String",
     "DateOfIdentification": "String",
     "DateOfDeath": "String",
     "MarriageDate": "String",
     "Instruction": "String",
     "PlaceBirth": "String",
     "Nationality": "String",
     "MotherName": "String",
     "FatherName": "String",
     "HouseNumber": "String",
     "Profession": "String",
     "ExpeditionCity": "String",
     "ExpeditionDepartment": "String",
     "BirthCity": "String",
     "BirthDepartment": "String",
     "TransactionType": 0,
     "TransactionTypeName": "String",
     "IssueDate": "String",
     "AdoProjectId": "String",
     "TransactionId": "String",
     "ProductId": "String",
     "Extras": {
          "additionalProp1": "String",
          "additionalProp2": "String",
          "additionalProp3": "String",
          "IdState": "String",
          "StateName":"String"
     },
     "NumberPhone": "String",
     "DactilarCode": "String",
     "ReponseControlList": Bool,
     "Response_ANI": "String"
}
Objeto de formato JSON con la información de la transacción.

Si el mecanismo de retorno pactado es GET, el resultado del proceso llegará con una cadena concatena a la URL de CallBack, en caso de que el mecanismo de respuesta pactado sea POST, se retornará como un Objeto JSON hacia URL_CallBack, que deberá estar en capacidad de digerir dicho objeto.

CAMPOS ARREGLO "EXTRAS"
NOMBRE TIPO DESCRIPCIÓN
IdState String Indica en número el resultado de la transacción con base en el diccionario expuesto más adelante.
StateName String Indica en texto el resultado de la transacción con base en el diccionario expuesto más adelante.
additionalProp1 String Indica la descripción de la respuesta si es necesaria, se usa para la descripción de errores.

SALIDAS DEL SDK
IdState StateName Descripción
15 Error El usuario sobrepaso el número de intentos fallidos de Liveness.
15 Error Documento no se encuentra enrolado.
15 Error Los datos proporcionados no corresponden con los criterios esperados.
15 Error El proceso de autorización no fue exitoso, valide el nombre de proyecto y/o el API Key.
15 Error El proceso de autorización no fue exitoso. Error en API Key y/o token expirado.
15 Error Los parametros enviados no existen en el servidor.
15 Error Error interno.
15 Error Las credenciales para obtener el Token no son correctas.
17 Proceso cancelado por el usuario El usuario navego atras en los tips del selfie.
17 Proceso cancelado por el usuario El usuario ha cerrado el SDK.
17 Proceso cancelado por el usuario El usuario ha cerrado en SDK en la pantalla de fallo de conexion.

Las respuestas se pueden validar en "DICCIONARIO DE RESPUESTAS".