# Create Instance

## TapToPaySdk.createInstance(tyroEnv, appContext, options)

In your `Application` class create an instance of the TapToPaySdk by invoking static method `TapToPaySdk.createInstance(tyroEnv, appContext, options)` in `onCreate()`.

### Parameters


```json
{
  "type": "object",
  "properties": {
    "tyroEnv": {
      "type": "TyroEnv",
      "description": "The `TyroEnv` requires the `PosInfo` and `ConnectionProvider` in the constructor. There are 3 TyroEnv subclasses to use based on the desired environment: `TyroEnvStub`, `TyroEnvDev`, and `TyroEnvProd`."
    },
    "applicationContext": {
      "type": "Context",
      "description": "The applicationContext from the Application. This function must be called inside onCreate() otherwise the context is null."
    },
    "options": {
      "type": "TyroOptions",
      "description": "Options to configure the SDK such as screen orientation."
    }
  },
  "required": [
    "tyroEnv",
    "applicationContext"
  ]
}
```

#### TyroEnv

See [TyroEnv](/pos/embedded-payments/android/sdk/tyro-env) for more info.

#### TyroOptions

Optional parameters to provide to the SDK.


```json
{
  "type": "object",
  "properties": {
    "screenOrientation": {
      "type": "TyroScreenOrientation",
      "description": "Sets the screen orientation for Tyro UI. For smaller devices like mobile phone, only `PORTRAIT` is supported.",
      "enum": [
        "PORTRAIT",
        "REVERSE_PORTRAIT",
        "SENSOR",
        "LANDSCAPE",
        "REVERSE_LANDSCAPE"
      ]
    },
    "themeMode": {
      "type": "TyroThemeMode",
      "description": "Sets the theme mode for Tyro UI. Defaults to `SYSTEM`.",
      "enum": [
        "LIGHT",
        "DARK",
        "SYSTEM"
      ]
    },
    "hapticFeedbackEnabled": {
      "type": "Boolean",
      "description": "Enables the haptic feedback for Tyro Embedded Payment SDK. Defaults to `true`."
    }
  },
  "required": []
}
```

## Example Implementation

Create an instance of the `TapToPaySdk` in your `Application` class.


```kotlin
// Kotlin Sample Code
import android.app.Application
import com.tyro.taptopay.sdk.api.TapToPaySdk
import com.tyro.taptopay.sdk.api.TapToPaySdk.Companion.createInstance
import com.tyro.taptopay.sdk.api.TyroEnv
import com.tyro.taptopay.sdk.api.TyroEnvDev
import com.tyro.taptopay.sdk.api.TyroEnvProd
import com.tyro.taptopay.sdk.api.TyroEnvStub
import com.tyro.taptopay.sdk.api.TyroOptions
import com.tyro.taptopay.sdk.api.TyroScreenOrientation
import com.tyro.taptopay.sdk.api.data.PosInfo

class SdkDemoApplication : Application() {
    lateinit var tapToPaySDK: TapToPaySdk

    override fun onCreate() {
        super.onCreate()
        tapToPaySDK = createTapToPaySdk()
    }

    @Suppress("KotlinConstantConditions")
    private fun createTapToPaySdk(): TapToPaySdk {
        val tyroEnv: TyroEnv =
            when (BuildConfig.FLAVOR) {
                "stub" -> TyroEnvStub()
                "dev" ->
                    TyroEnvDev(
                        connectionProvider = SdkDemoConnectionProvider(),
                    )
                else ->
                    TyroEnvProd(
                        connectionProvider = SdkDemoConnectionProvider(),
                    )
            }
        return createInstance(tyroEnv, applicationContext, TyroOptions(TyroScreenOrientation.PORTRAIT, TyroThemeMode.SYSTEM, hapticFeedbackEnabled = true)).apply {
            setPosInfo(
                PosInfo(
                    posName = "Demo",
                    posVendor = "Tyro Payments",
                    posVersion = "1.0",
                    siteReference = "Sydney",
                ),
            )
        }
    }
}
```