Analytics

The SDK provides an interface that you can implement and that will be used by the SDK to send events. The interface is simply the one below:

interface Tracer {
   fun trace(trace: Trace)
}

Trace is the object passed to your implementation and you can use it with any of your analytics tools or any custom tracing mechanism. Make sure to avoid blocking calls if you push the information of the trace object to any external system.

The Trace object has the following properties:

TraceCategory has the following properties:

TraceEvent has following properties:

TraceStatus has the following parameters:

TracePage has following properties:

TraceStatusCode has the following properties:

Note: Please be aware that all codes with event IN_PROGRESS, except for SCAN_DOCUMENT_FRONT_PROCESSED and SCAN_DOCUMENT_BACK_PROCESSED, are throttled (limited to one identical event every 5 seconds). This is to ensure that your client is not overwhelmed and to accommodate varying speeds of different phones, which may send different numbers of events.

To enable the tracing mechanism pass your implementation to the init method:

class App: Application() {

	override fun onCreate() {
    	    super.onCreate()
    	    UqudoSDK.init(applicationContext, TracerObject)
  	}

  	private object TracerObject : Tracer {
          override fun trace(trace: Trace) {
              Logger.d("---Analytics", trace.toString())
          }
      }

}

Below you can find an example of the tracing above for a full enrollment flow with some errors in between to showcase the events:

2021-02-04 09:42:38.632 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=, category=SDK, event=INIT, status=SUCCESS, page=null, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:37:38 GMT+07:00 2021)
2021-02-04 09:42:39.117 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=VIEW, status=SUCCESS, page=SCAN, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:42:39 GMT+07:00 2021)
2021-02-04 09:42:45.798 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=SCAN, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:42:45 GMT+07:00 2021)
2021-02-04 09:42:52.749 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=FAILURE, page=SCAN, statusCode=SCAN_DOCUMENT_NOT_RECOGNIZED, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:42:52 GMT+07:00 2021)
2021-02-04 09:42:53.736 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=SCAN, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:42:53 GMT+07:00 2021)
2021-02-04 09:43:03.767 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=SUCCESS, page=SCAN, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:43:03 GMT+07:00 2021)
2021-02-04 09:43:03.871 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=VIEW, status=SUCCESS, page=READ, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:43:03 GMT+07:00 2021)
2021-02-04 09:43:07.090 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=READ, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:43:07 GMT+07:00 2021)
2021-02-04 09:43:39.553 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=FAILURE, page=READ, statusCode=READ_DOCUMENT_DISCONNECTED, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:43:39 GMT+07:00 2021)
2021-02-04 09:43:49.216 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=READ, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:43:49 GMT+07:00 2021)
2021-02-04 09:43:58.540 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=SUCCESS, page=READ, statusCode=null, statusMessage=null, documentType=PASSPORT, timestamp=Thu Feb 04 09:43:58 GMT+07:00 2021)
2021-02-04 09:43:58.652 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=VIEW, status=SUCCESS, page=FACE, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:43:58 GMT+07:00 2021)
2021-02-04 09:44:05.316 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=FACE, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:05 GMT+07:00 2021)
2021-02-04 09:44:11.319 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=FAILURE, page=FACE, statusCode=FACE_TIMEOUT, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:11 GMT+07:00 2021)
2021-02-04 09:44:15.984 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=FACE, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:15 GMT+07:00 2021)
2021-02-04 09:44:30.253 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=FAILURE, page=FACE, statusCode=FACE_TIMEOUT, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:30 GMT+07:00 2021)
2021-02-04 09:44:35.222 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=FACE, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:35 GMT+07:00 2021)
2021-02-04 09:44:42.707 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=SUCCESS, page=FACE, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:42 GMT+07:00 2021)
2021-02-04 09:44:42.921 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=VIEW, status=SUCCESS, page=BACKGROUND_CHECK, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:42 GMT+07:00 2021)
2021-02-04 09:44:48.973 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=START, status=SUCCESS, page=BACKGROUND_CHECK, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:48 GMT+07:00 2021)
2021-02-04 09:44:49.853 18994-19168/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=COMPLETE, status=SUCCESS, page=BACKGROUND_CHECK, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:49 GMT+07:00 2021)
2021-02-04 09:44:51.061 18994-19190/io.uqudo.demo D/---Analytics: Trace(sessionId=fd86bab1-7b95-4f0e-a6ba-d5322c4a19e2, category=ENROLLMENT, event=FINISH, status=SUCCESS, page=null, statusCode=null, statusMessage=null, documentType=null, timestamp=Thu Feb 04 09:44:51 GMT+07:00 2021)

Below you can find an example on how to use the trace information with Firebase Analytics:

class App: Application() {

  private lateinit var firebaseAnalytics: FirebaseAnalytics

  override fun onCreate() {
    super.onCreate()

    firebaseAnalytics = Firebase.analytics
    UqudoSDK.init(applicationContext, TracerObject(firebaseAnalytics))
  }

  private class TracerObject constructor(private val firebaseAnalytics: FirebaseAnalytics) : Tracer {
    override fun trace(trace: Trace) {
       firebaseAnalytics.logEvent(trace.category.name) {
           param("sessionId", trace.sessionId)
           param("event", trace.event.name)
           param("status", trace.status.name)
           param("timestamp", trace.timestamp.toString())
           trace.page?.let { param("page", it.name) }
           trace.statusCode?.let { param("statusCode", it.name) }
           trace.documentType?.let { param("documentType", it.name) }
           trace.statusMessage?.let { param("statusMessage", it) }
       }

       if(trace.event == TraceEvent.VIEW) {
           firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW) {
               param(FirebaseAnalytics.Param.SCREEN_NAME, trace.page?.name!!)
               param(FirebaseAnalytics.Param.SCREEN_CLASS, trace.page?.name!!)
           }

       }
    }
  }

Last updated