Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import android.app.Activity;

import androidx.annotation.NonNull;

import com.facebook.react.bridge.NoSuchKeyException;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
Expand All @@ -13,10 +15,14 @@
import java.util.List;
import java.util.ArrayList;

import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.bridge.WritableMap;

import com.facebook.react.bridge.Arguments;

import com.onfido.android.sdk.capture.Onfido;
import com.onfido.android.sdk.capture.EnterpriseFeatures;
import com.onfido.android.sdk.capture.UserEventHandler;
import com.onfido.android.sdk.capture.ui.options.FlowStep;
import com.onfido.android.sdk.capture.OnfidoConfig;
import com.onfido.android.sdk.capture.OnfidoFactory;
Expand All @@ -26,6 +32,7 @@
import com.onfido.android.sdk.capture.utils.CountryCode;
import com.onfido.android.sdk.capture.ui.options.CaptureScreenStep;
import com.onfido.android.sdk.capture.errors.*;
import com.onfido.segment.analytics.Properties;

public class OnfidoSdkModule extends ReactContextBaseJavaModule {

Expand All @@ -38,6 +45,23 @@ public OnfidoSdkModule(final ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
this.client = OnfidoFactory.create(reactContext).getClient();
Onfido.Companion.setUserEventHandler(new UserEventHandler() {
@Override
public void handleEvent(@NonNull String s, @NonNull Properties properties) {
WritableMap params = Arguments.createMap();
params.putString("event_name", properties.get("name").toString());
if (properties.get("doc_type") != null) {
params.putString("doc_type", properties.get("doc_type").toString());
}
if (properties.get("country") != null) {
params.putString("country", properties.get("country").toString());
}
if (properties.get("mode") != null) {
params.putString("mode", properties.get("mode").toString());
}
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("Onfido", params);
}
});
this.activityEventListener = new OnfidoSdkActivityEventListener(client);
reactContext.addActivityEventListener(activityEventListener);
}
Expand Down
1 change: 1 addition & 0 deletions ios/OnfidoSdk-Bridging-Header.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@
//

#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
3 changes: 2 additions & 1 deletion ios/OnfidoSdk.m
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>

@interface RCT_EXTERN_MODULE(OnfidoSdk, NSObject)
@interface RCT_EXTERN_MODULE(OnfidoSdk, RCTEventEmitter)

RCT_EXTERN_METHOD(
start:(NSDictionary *)config
Expand Down
37 changes: 35 additions & 2 deletions ios/OnfidoSdk.swift
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,26 @@ public func buildOnfidoConfig(config:NSDictionary, appearance: Appearance) throw
}

@objc(OnfidoSdk)
class OnfidoSdk: NSObject {
class OnfidoSdk: RCTEventEmitter {

@objc static func requiresMainQueueSetup() -> Bool {
var hasListeners = false

@objc override static func requiresMainQueueSetup() -> Bool {
return false
}

@objc override func supportedEvents() -> [String] {
return ["Onfido"]
}

@objc override func startObserving() -> Void {
self.hasListeners = true
}

@objc override func stopObserving() -> Void {
self.hasListeners = false
}

@objc func start(_ config: NSDictionary,
resolver resolve: @escaping RCTPromiseResolveBlock,
rejecter reject: @escaping RCTPromiseRejectBlock) -> Void {
Expand All @@ -192,6 +206,25 @@ class OnfidoSdk: NSObject {
let faceVariant = captureFace?["type"] as? String

let onfidoFlow = OnfidoFlow(withConfiguration: builtOnfidoConfig)
.with(eventHandler: {
(event: Event) -> () in
if (self.hasListeners) {
var mode = ""
do {
let data = try JSONSerialization.data(withJSONObject: event.properties["mode"] ?? [], options: [])
mode = String(data: data, encoding: String.Encoding.utf8) ?? ""
} catch {
mode = ""
}
let body = [
"event_name": event.properties["name"],
"doc_type": event.properties["doc_type"],
"country": event.properties["country"],
"mode": mode,
]
self.sendEvent(withName: "Onfido", body: body)
}
})
.with(responseHandler: { [weak self] response in
guard let `self` = self else { return }
switch response {
Expand Down
6 changes: 5 additions & 1 deletion js/Onfido.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { NativeModules, Platform } from 'react-native';
import { NativeModules, NativeEventEmitter, Platform } from 'react-native';
import { OnfidoDocumentType, OnfidoCaptureType, OnfidoCountryCode, OnfidoAlpha2CountryCode } from "./config_constants";

const { OnfidoSdk } = NativeModules;
Expand Down Expand Up @@ -59,6 +59,10 @@ const Onfido = {
console.log(error);
throw error;
});
},
addEventListener(callback) {
const eventEmitter = new NativeEventEmitter(OnfidoSdk);
return eventEmitter.addListener("Onfido", callback)
}
};

Expand Down