Integration

Runtime permissions

If your application does not request it in advance, Identity will request permission at the time it is needed for CAMERA. If your policy uses location context, your application must request CORE_LOCATION permission.

PermissionReasonRequired

AV_FOUNDATION (CAMERA)

Capturing the selfie in policies with facial re-authentication

No

CORE_LOCATION

Get data on policies with location context

Yes, if the policy uses localization context

Instantiating the SDK

First, create an object of type Identity. This object is for you to configure all your business rules:

self.identity = IdentitySDK.Builder(mobileToken: "mobileToken", livenessToken: "livenessToken")
            .build()

Builder method

ParameterRequired

String mobileToken

Usage token associated with your Identity account (see how to get it here).

Yes

String faceAuthToken

Token associated with your Trust account (see how to get it here).

Yes

.setStage(stage: CAFStage)

Allows you to choose the environment in wich the SDK will run (production, beta).

No. The default is .PROD

.setEmailUrl(url: String)

Used to redirect the user to a custom link in the outgoing Email flow.

No

.setPhoneUrl(url: String)

Used to redirect the user to a custom link in the SMS sending flow.

No

Consulting a policy

To authenticate a user, use the verifyPolicy method. You must enter the user's CPF and the identifier of the policy to be used.

Parameters

ParameterRequired

String personId

User CPF

Yes

String policyId

Policy identifier

Yes

Example

identity.verifyPolicy(personID: personID, policyId: policyId) { result in
            switch result {
            case .onSuccess((let isAutorized, let attestation)):
                //Success
            case .onPending((let isAutorized, let attestation)):
                //Pending Status
            case .onError(let error):
                //Error
            case .onCanceled(let canceled):
                //User canceled selfie capture
            }
        }

isAuthorized Status

CaseStatus

No Registered face

False

Fraud or no match

False

User approved

True

Attestation return

The attestation will be available after the user authentication.

Example

    isAuthorized = true
    attestation = {value}

Handling errors

Some errors can prevent Identity from running. To identify them, check the instance of the Failure object class.

instanceOfDescriptionExample

PermissionReason

You are missing some mandatory permission

Start facial authentication without camera permission granted

AvailabilityReason

Identity is not available for use. The variable Failure.getMessage() contains instructions for the user

The device's internal storage is full when installing the app, and it is not possible to install the face detection template together

NetworkReason

Internet connection failure

The user was without internet during face authentication

ServerReason

When a requisition receives a status code of failure

In theory, it shouldn't happen. If you see something like this, let us know!

SecurityReason

When Identity cannot be started due to a security reason

When Google Security Provider is not updating

StorageReason

There is no space on the user device's internal storage

When there is no space on the internal storage while capturing the document photo

LibraryReason

When an internal library cannot be started

Forgetting to set noCompress configuration will lead to this failure in DocumentDetector

PolicyReason

You are using a policy that we do not yet support. The variable Failure.getMessage() contains instructions for the developer

Use a policy with localization context

GetLocationReason

The SDK could not get the device location

No GPS data available

To check the error extension use error.errorDescription inside you code after the error return.

Example

case .onError(let error):
    print("Error:", error.errorDescription ?? error)

You can also extends IdentityError class, and customize the error messages that you want to use. Here is an example with default error messages.

Example

extension IdentityError: LocalizedError {
    public var errorDescription: String? {
        switch self {
        case .PermissionReason(let permission):
            return NSLocalizedString("\(permission) é necessária para iniciar o SDK. Por favor, requisite-a ao seu usuário", comment: "Permission Reason")
        case .AvailabilityReason(let message):
            return NSLocalizedString(message, comment: "Availability Reason")
        case .NetworkReason:
            return NSLocalizedString("Falha ao conectar-se ao servidor", comment: "Network Reason")
        case .ServerReason(let message, let code):
            return NSLocalizedString("message: \(message) \n with code: \(code ?? 00)", comment: "Server Reason")
        case .SecurityReason(let message):
            return NSLocalizedString(message, comment: "Security Reason")
        case .StorageReason(let message):
            return NSLocalizedString(message, comment: "Storage Reason")
        case .LibraryReason(let message):
            return NSLocalizedString(message, comment: "Library Reason")
        case .PolicyReason(let message):
            return NSLocalizedString(message, comment: "Policy Reason")
        case .GetLocationReason(let message):
            return NSLocalizedString(message, comment: "Failed to get user location")
        case .TerminateByUser(let message):
            return NSLocalizedString(message, comment: "Terminate by User")
        }
    }
}

Last updated

Logo

2023 © Caf. - All rights reserved