# Android SDK

## Getting Started:

The minimum requirements for the SDK are:

* Android 5.0 (API level 21) or higher
* Internet connection

### Permissions

Required permissions are linked automatically by the SDK.

### Integration by sdk

Use the SDK in your application by including the Maven repositories with the following `build.gradle` configuration in Android Studio:

```
repositories {
	...
	maven { url 'https://jitpack.io' }
}
```

### Integration by library

Use the Library in your application by implemention lib with the following `build.gradle` project module in Android Studio:

```
	implementation 'com.github.faceki:blaze-android-sdk:Tag'

```

or

```
    implementation("com.github.faceki:blaze-android-sdk:Tag")

```

and including the Maven repositories with the following `build.gradle` configuration in Android Studio:

```
repositories {
	...
	maven { url 'https://jitpack.io' }
}
```

### Example

```
import com.faceki.android.FaceKi
```

### Kotlin

```
     FaceKi.startKycVerification(
                context = this@MainActivity,
                verificationLink = TEST_VERIFICATION_LINK,
                recordIdentifier = TEST_RECORD_IDENTIFIER,
                kycResponseHandler = kycResponseHandler
            )

//custom logo
FaceKi.setCustomIcons(
                iconMap = hashMapOf(
                    FaceKi.IconElement.Logo to FaceKi.IconValue.Resource(R.drawable.logo)
                )
            )

//custom colors
FaceKi.setCustomColors(
                colorMap = hashMapOf(
                    FaceKi.ColorElement.BackgroundColor to FaceKi.ColorValue.StringColor("#FFFFFF")
                )
            )
```

**To Get the response back from the SDK.**

```
    private val kycResponseHandler: KycResponseHandler = object : KycResponseHandler {
        override fun handleKycResponse(
            json: String?,
            result: VerificationResult
        ) {
            when (result) {
                is VerificationResult.ResultOk -> {
                    Toast.makeText(this@MainActivity, "ResultOk", Toast.LENGTH_SHORT).show()
                }

                is VerificationResult.ResultCanceled -> {
                    Toast.makeText(this@MainActivity, "ResultCanceled", Toast.LENGTH_SHORT).show()
                }
            }

            Toast.makeText(this@MainActivity, "kycResponseHandler $json", Toast.LENGTH_SHORT).show()
        }
    }
```

### Java

```
import java.util.HashMap;

// Inside your MainActivity class

// Call startKycVerification
FaceKi.startKycVerification(
        this,
TEST_VERIFICATION_LINK,
        TEST_RECORD_IDENTIFIER,
        kycResponseHandler
);

// Set custom logo
HashMap<FaceKi.IconElement, FaceKi.IconValue> iconMap = new HashMap<>();
iconMap.put(FaceKi.IconElement.Logo, new FaceKi.IconValue.Resource(R.drawable.logo));
FaceKi.setCustomIcons(iconMap);

// Set custom colors
HashMap<FaceKi.ColorElement, FaceKi.ColorValue> colorMap = new HashMap<>();
colorMap.put(FaceKi.ColorElement.BackgroundColor, new FaceKi.ColorValue.StringColor("#FFFFFF"));
FaceKi.setCustomColors(colorMap);

// Define KycResponseHandler
private KycResponseHandler kycResponseHandler = new KycResponseHandler() {
    @Override
    public void handleKycResponse(String json, VerificationResult result) {
        if (result instanceof VerificationResult.ResultOk) {
            Toast.makeText(MainActivity.this, "ResultOk", Toast.LENGTH_SHORT).show();
        } else if (result instanceof VerificationResult.ResultCanceled) {
            Toast.makeText(MainActivity.this, "ResultCanceled", Toast.LENGTH_SHORT).show();
        }

        Toast.makeText(MainActivity.this, "kycResponseHandler " + json, Toast.LENGTH_SHORT).show();
    }
};
```

## Custom colors

Use `setCustomColors` to customize the color scheme.

### Kotlin

```
val colorMap = hashMapOf(
    FaceKi.ColorElement.ButtonBackgroundColor to FaceKi.ColorValue.IntColor(myColorInt),
    // Add other elements as needed
)
FaceKi.setCustomColors(colorMap)
```

### Java

```
HashMap<FaceKi.ColorElement, FaceKi.ColorValue> colorMap = new HashMap<>();
        colorMap.put(FaceKi.ColorElement.BackgroundColor, new FaceKi.ColorValue.StringColor("#FFFFFF"));
        FaceKi.setCustomColors(colorMap);
```

## Custom logo

Use `setCustomIcons` to customize the icons.

### Kotlin

```
val iconMap = hashMapOf(
    FaceKi.IconElement.Logo to FaceKi.IconValue.Resource(myDrawableResId),
    // Add other elements as needed
)
FaceKi.setCustomIcons(iconMap)
```

### Java

```
HashMap<FaceKi.IconElement, FaceKi.IconValue> iconMap = new HashMap<>();
        iconMap.put(FaceKi.IconElement.Logo, new FaceKi.IconValue.Resource(R.drawable.ic_launcher_background));
        FaceKi.setCustomIcons(iconMap);
```

#### Response Handling

* The response from KYC verification is a plain JSON object.
* You can convert this response into a JSON object using serialization libraries like Gson or Moshi.

### Methods

* **startKycVerification**: Initiates the KYC verification process.
* **setCustomColors**: Customizes the colors of various UI elements.
* **setCustomIcons**: Customizes the icons used in the UI.

### Enums and Sealed Classes

#### ColorElement

* Enum defining different UI elements that can have their colors customized.

#### ColorValue

* Sealed class representing a color value.
* Types:
  * `IntColor`: Represents color as an integer.
  * `StringColor`: Represents color as a string (e.g., "#FFFFFF").

#### IconElement

* Enum defining different UI elements that can have their icons customized.

#### IconValue

* Sealed class representing an icon value.
* Types:
  * `Resource`: Represents an icon as a resource ID.
  * `Url`: Represents an icon as a URL.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.faceki.com/mobile-sdk/android-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
