# 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 %}                            |                                                                           |
