AnylineFaceAuthentication

AnylineFaceAuthentication pairs identity document scanning with a real-time liveness check utilizing the iPhone’s camera, best suited for authenticating users over the internet.

Suitable IDs include passports, national IDs, as well as some supported driving licenses (TODO: show a full list of supported identity documents).

NOTE: An internet connection is required in order to use face authentication. (TODO: explain how data sent is captured and used).

How to use

This section shows how to set up and use AnylineFaceAuthentication for your iOS app.

You will need the following keys: Anyline License Key, and Anyline Facescan Encryption Key (TODO: find the directions for obtaining the keys).

First, build the AnylineFaceAuthentication and FaceTecSDK frameworks.

make all

The frameworks can be found in: … TODO: give the locations of the xcframework files.

Add both .xcframework files, as well as Anyline.xcframework (TODO: link to the directions) to your iOS project.

(TODO: make a Cocoapod of AnylineFaceAuthentication.)

On the view controller where you would want the face authentication flow to take place, make the following imports:

#import <Anyline/Anyline.h>
#import <AnylineFaceAuthentication/AnylineFaceAuthentication.h>

Then on viewDidLoad, initialize AnylineFaceAuthenticationSDK using the Anyline license key and encryption key. If the completion block returns successfully, obtain an instance of FaceAuthenticationViewController using AnylineFaceAuthenticationSDK createViewControllerWithDelegate:, and add it as a child to this view controller:

[[AnylineFaceAuthenticationSDK sdk] setupProdModeWithAnylineLicenseKey:kAnylineLicenseKey
                                                        encryptionKey:kFaceScanEncryptionKey
                                                 faceTecLicenseString:nil
                                                          endpointUrl:nil
                                                           completion:^(BOOL success, NSError * _Nullable error) {

  if (error) {
    /* ... */
    return;
  }

  UIViewController *faceAuthVC = [[AnylineFaceAuthenticationSDK sdk]
    createViewControllerWithDelegate:self];

  [self addChildViewController:faceAuthVC];
  [self.view addSubview:faceAuthVC.view];
  [faceAuthVC didMoveToParentViewController:self];
}];

Then, implement FaceAuthenticationDelegate for the view controller:

- (void)faceAuthenticationController:(FaceAuthenticationViewController *)faceAuthenticationViewController
                  completedWithError:(NSError *)error {
  // handle error
}

- (void)faceAuthenticationController:(FaceAuthenticationViewController * _Nonnull)faceAuthenticationController
         completedWithLivenessResult:(id<FaceTecSessionResult> _Nonnull)completedWithLivenessResult
                          scanResult:(ALIDResult<id> * _Nonnull)scanResult
                          matchLevel:(enum MatchLevel)matchLevel {
    
    NSString *matchString = [[self class] matchStringForLevel:matchLevel];
    ALUniversalIDIdentification *identification = (ALUniversalIDIdentification *)scanResult.result;
    // ...
}

From -[faceAuthenticationController:completedWithLivenessResult:scanResult:matchLevel:], identification returns the scanned information from the identification document presented during the authentication process, and matchLevel gives you an accuracy level for the face scan using the photo from the identification document as reference.

The match levels can be read as follows:

  • Match Level1 – 99% match
  • Match Level2 – 99.6% match
  • Match Level3 – 99.8% match
  • Match Level4 – 99.9% match
  • Match Level5 – 99.99% match
  • Match Level6 – 99.999% match
  • Match Level7 – 99.9998% match
  • Match Failed – No match detected

(Also check the demo app for usage examples.)

GitHub

View Github