Version: Next

Getting Started

Before You Begin

This SDK is stored in the private maven repo and developed for use with the Cloudike Backend. If you need access, please Contacts Us

Requirements

Installation

To enable library in your app, you should add a link to our private repository in the application-level Gradle file (usually app / build.gradle). Then, add a dependency for the libraries cloudikecontacts и cloudikelog as shown below:

// ...
repositories {
// ...
maven {
url "https://rt.cloudike.com/artifactory/libs-release-local"
credentials {
username = "${artifactory_username}"
password = "${artifactory_password}"
}
}
}
// ...
dependencies {
implementation "com.cloudike.cloudikecontacts:cloudikecontacts:5.0.2"
implementation "com.cloudike.cloudikelog:cloudikelog:1.2.2"
}

Initialization

Initialization is performed in two stages.

Stage 1. Initialize library

The best place for the first stage is the method Application.onCreate(). The first step is to initialize the library Logger. Optionally, you can implement initRxErrorHandler() to log errors that occur in RxJava2.

private lateinit var contactManager: ContactManager
override fun onCreate() {
super.onCreate()
// ...
// Initialize logger first because Contact SDK uses it
Logger.init(applicationContext)
Logger.setDebugMode(true)
// Optionaly
// initRxErrorHandler()
// Initialize library
ContactManager.initInstance(
context = applicationContext,
competitionMode = ContactManager.CompetitionMode.STANDALONE,
competitorPackageName = "com.package.name.sample_package",
canScheduleBackup = true,
allowNetworkUsageInRoaming = true)
contactManager = ContactManager
// ...
}

Lastly, initialize the contacts library using the method ContactManager.initInstance().

If you need to use the custom parametersSSL Socket Factory and Trust Manager, use the following guide.

Stage 2. Preparation for work.

After user has logged in, it is necessary to call ContactManager.prepareToWork() for work:

ContactManager.prepareToWork(
baseUrl = "Base URL of the backend",
token = "Mountbit-Auth token received after user login",
profileId = "User profile id",
userAgent = "User agent string",
deviceId = "Unique device id")

Optionally: initialization of the RxJava2 error handler

To log errors that occur in RxJava2, it is advisable to initialize the handler:

private fun initRxErrorHandler() {
RxJavaPlugins.setErrorHandler(Consumer { exception ->
var e: Throwable? = exception
if (e is UndeliverableException) {
e = e.cause
}
if (e is OnErrorNotImplementedException) {
// error received by observer that does not provide onError handler
if (e.cause != null) {
e = e.cause
}
}
if (e is IOException || e is SocketException) {
// fine, irrelevant network problem or API that throws on cancellation
Logger.main().i("RxErrorHandler", "Exception caught", e)
return@Consumer
}
if (e is InterruptedException) {
// fine, some blocking code was interrupted by a dispose call
Logger.main().i("RxErrorHandler", "Exception caught", e)
return@Consumer
}
if (e is NullPointerException ||
e is IllegalArgumentException ||
e is UnsupportedOperationException) {
// that's likely a bug in the application
Logger.main().e("RxErrorHandler", "Exception caught", e)
Thread.currentThread().uncaughtExceptionHandler
.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
if (e is IllegalStateException) {
Logger.main().e("RxErrorHandler", "Exception caught", e)
// that's a bug in RxJava or in a custom operator
Thread.currentThread()
.uncaughtExceptionHandler
.uncaughtException(Thread.currentThread(), e)
return@Consumer
}
Logger.main().w("RxErrorHandler",
"Undeliverable exception received, not sure what to do", e)
})
}

Dependencies

Our SDK uses the following dependencies:

// RxJava
implementation "io.reactivex.rxjava2:rxjava:2.2.19"
implementation "io.reactivex.rxjava2:rxkotlin:2.3.0"
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
// Retrofit
implementation "com.squareup.retrofit2:retrofit:2.6.4"
implementation "com.squareup.retrofit2:converter-gson:2.6.4"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.6.4"
implementation "com.squareup.okhttp3:okhttp:3.12.10"
implementation "com.squareup.okhttp3:logging-interceptor:3.12.10"
// Work manager
implementation "android.arch.work:work-runtime:1.0.1"
implementation "android.arch.work:work-runtime-ktx:1.0.1"
// Date-time
implementation "com.jakewharton.threetenabp:threetenabp:1.2.2"
// ASDtech
implementation "com.cloudike.cloudikelog:cloudikelog:1.2.1"