# Development

{% tabs %}
{% tab title="Android" %}

### Usage

For Android, a valid license key is required to start the process.

{% code title="Java" %}

```java
Config config = new Config.Builder()
                .setExtractAddress(true)
                .setExtractGender(true)
                .setExtractReligion(true)
                .build();

OkayLiteActivity.startMyKadScanning(this, LICENSE_KEY, config, new OkayLiteResultListener() {
    @Override
    public void onResultReceived(boolean isSuccess, int errorCode, MyKadResult result) {
        Logger.d("result => " + result);
        if (isSuccess) {
            //do something with success result
        } else {
            //do something with error
        }
    }
});


```

{% endcode %}

{% code title="Kotlin" %}

```kotlin
//By default it is true
val config = Config.Builder()
    .setExtractAddress(false)
    .setExtractReligion(false)
    .setExtractGender(false)
    .build()
        
OkayLiteActivity.startMyKadScanning(this, LICENSE_KEY,config,
{ isSuccess, errorCode, result ->
    if (isSuccess) {
        //do something with success result
    } else {
        //do something with error
    }
})
```

{% endcode %}

{% hint style="info" %}
The configurations by default are set as "true"
{% endhint %}

### Result

These are the explanation of the results that the OkayID Lite will be returning as follow:

| Property         | Description                                                                        |
| ---------------- | ---------------------------------------------------------------------------------- |
| fullName         | Full name                                                                          |
| icNumber         | IC number                                                                          |
| gender           | Gender                                                                             |
| dob              | Date of Birth                                                                      |
| religion         | Religion                                                                           |
| address          | Full address                                                                       |
| fullDocumentPath | <p>Path to the full document image captured </p><p>during the scanning process</p> |

### Error Code&#x20;

These are the error code that will be raised after each of the scanned is done.

| Error Code   | Constant Name                            | Description                                                                            |
| ------------ | ---------------------------------------- | -------------------------------------------------------------------------------------- |
| -1           | MyKadResult.NO\_ERROR                    | MyKad has been successfully scanned                                                    |
| 1            | MyKadResult.ERROR\_INVALID\_LICENSE\_KEY | The license is invalid                                                                 |
| 2            | MyKadResult.ERROR\_PERMISSION\_DENIED    | The user does not grant permission to access the camera and storage in order to do OCR |
| 3            | MyKadResult.ERROR\_USER\_CANCEL\_ACTION  | The user cancels during the scanning process (eg. user press back button)              |
| {% endtab %} |                                          |                                                                                        |

{% tab title="iOS" %}

### Usage

For iOS, there are a few steps that needed to be followed as below:

* Then, import "**OkayIDLite"** module into the swift file.

```
import OkayIDLite
```

* After that, build the configuration object as follow:

```
let config = Config.Builder()
    .setExtractAddress(true) // Toggle address extraction
    .setExtractGender(true) // Toggle gender extraction
    .setExtractReligion(true) // Toggle religion extraction
    .build()
```

* Then, start the process by calling "startMyKadScanning" on the **OkayIDLite** class with the config object. It is also a must to pass a valid license string and a reference to the view controller. The "self" is referring to the current view controller in the example below:

```
OkayIDLiteSDK.startMyKadScanning(
    viewController: self,
    license: lic,
    config: config
)
{ success, errorCode, result in
    if(success) {
        // handle success
    } else {
        // handle error
    }
}
```

Code above is an example to handle the success or failure of the MyKad scanning that the action can be customized by the user.

{% hint style="info" %}
If it is not successful, the result will be returning nil
{% endhint %}

### Result

These are the explanation of the results that the OkayID Lite will be returning as follow:

| Property         | Description                                                                        |
| ---------------- | ---------------------------------------------------------------------------------- |
| fullName         | Full name                                                                          |
| icNumber         | IC number                                                                          |
| gender           | Gender                                                                             |
| dob              | Date of Birth                                                                      |
| religion         | Religion                                                                           |
| address          | Full address                                                                       |
| fullDocumentPath | <p>Path to the full document image captured </p><p>during the scanning process</p> |

### Error Code&#x20;

These are the error code that will be raised after each of the scanned is done.

| Error Code   | Constant Name                                  | Description                                                              |
| ------------ | ---------------------------------------------- | ------------------------------------------------------------------------ |
| -1           | MyKadResult.NO\_ERROR                          | MyKad has been successfully scanned                                      |
| 1            | MyKadResult.ERROR\_INVALID\_LICENSE\_KEY       | The license is invalid                                                   |
| 2            | MyKadResult.ERROR\_PERMISSION\_DENIED          | The use did not grant permission to access the camera in order to do OCR |
| 3            | MyKadResult.ERROR\_USER\_CANCEL\_ACTION        | The user cancelled during the scanning process                           |
| 4            | MyKadResult.ERROR\_UNSUPPORTED\_CAMERA\_PRESET | The device's camera does not support the required preset for video OCR   |
| {% endtab %} |                                                |                                                                          |

{% tab title="React-native" %}

### Usage

For React-native, this is an example for the document capture for the custom camera UI design as following:&#x20;

```
import RNOkayidLite from "react-native-okayid-lite"

//By default it is true
RNOkayidLite.startMykadScanning({
    license: license,
    extractAddress: false,
    extractGender: false,
    extractReligion: false
})
    .then(result => {
        console.log(result)
    })
    .catch(error => {
        console.log(error)
    })

```

### Configuration

There are some configurations object to be followed in the development stage. The configurations that are going to show below can be implemented into the **Usage** section above.

### Result

| Property          | Description                                                          |
| ----------------- | -------------------------------------------------------------------- |
| fullName          | Full name                                                            |
| icNumber          | IC number                                                            |
| gender            | Gender                                                               |
| dob               | Date of birth                                                        |
| religion          | Religion                                                             |
| address           | Full address                                                         |
| fullDocumentImage | Path to the full document image captured during the scanning process |

### Error Code

| Error                                    | Description                                                               |
| ---------------------------------------- | ------------------------------------------------------------------------- |
| invalid license                          | The license is invalid                                                    |
| permission denied                        | The user did not grant permission to access the camera in order to do OCR |
| cancel                                   | The user cancelled during the scanning process                            |
| failed                                   | Unexpected error                                                          |
| unsupported camera preset **(iOS Only)** | The device's camera does not support the required preset for video OCR.   |
| {% endtab %}                             |                                                                           |
| {% endtabs %}                            |                                                                           |


---

# 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://api-old.innov8tif.com/okayid-lite-mobile-sdk/development.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.
