Android SDK
The Quiltt Android SDK provides Components for seamless integration of the Quiltt Connector into your Android app.
Documentation
For full documentation, additional examples and the source code, see the Quiltt Android SDK on Github.
Link to this section#Install
Link to this section#Maven Central
android {
defaultConfig {
minSdk = 26 // or greater
}
}
dependencies {
...
implementation("app.quiltt:connector:<INSERT_LATEST_VERSION>")
}
Link to this section#Setting up OAuth
For production Environments, you must pass a https://
URL to oauthRedirectUrl
. This URL must be a valid deep link to launch your app.
To set up a deep link to your app, please see the Android App Links guide.
If you are bringing your own Plaid credentials, you must register the Quiltt callback URL as an allowed redirect URI in the Plaid Dashboard. See the Plaid OAuth guide for more information.
https://*.callback.quiltt.io
Link to this section#Usage
Link to this section#Jetpack Compose
package app.quiltt.app_jetpack_compose
import android.app.Activity
import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.viewinterop.AndroidView
import app.quiltt.connector.QuilttConnector
import app.quiltt.connector.QuilttConnectorConnectConfiguration
class QuilttConnectorActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val config = QuilttConnectorConnectConfiguration(
connectorId = "<CONNECTOR_ID>",
institution = "<OPTIONAL_SEARCH_TERM_TO_PREFILL_INSTITUTION>",
oauthRedirectUrl = "<YOUR_HTTP_APP_LINK")
val token = "<ACCESS_TOKEN>"
setContent {
QuilttConnectorContent(config = config, token = token)
}
}
}
@Composable
fun QuilttConnectorContent(config: QuilttConnectorConnectConfiguration, token: String? = null) {
val context = LocalContext.current
val quilttConnector = QuilttConnector(context)
if (token != null) {
quilttConnector.authenticate(token)
}
val connectorWebView = quilttConnector.connect(
config = config,
onEvent = { eventType, metadata ->
println("Event: $eventType")
println("Metadata: $metadata")
},
onExit = { eventType, metadata ->
println("Event: $eventType")
println("Metadata: $metadata")
},
onExitSuccess = { metadata ->
println("Exit success!")
println("Metadata: $metadata")
Toast.makeText(context, metadata.connectionId, Toast.LENGTH_LONG).show()
if (context is Activity) {
context.finish()
}
},
onExitAbort = { metadata ->
println("Exit abort!")
println("Metadata: $metadata")
if (context is Activity) {
context.finish()
}
},
onExitError = { metadata ->
println("Exit error!")
println("Metadata: $metadata")
if (context is Activity) {
context.finish()
}
})
AndroidView(factory = { connectorWebView } )
}
Link to this section#XML Layout
package app.quiltt.example
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import androidx.constraintlayout.widget.ConstraintLayout
import app.quiltt.connector.QuilttConnector
import app.quiltt.connector.QuilttConnectorConnectConfiguration
import app.quiltt.connector.QuilttConnectorWebView
class QuilttConnectorActivity : AppCompatActivity() {
private lateinit var webView: QuilttConnectorWebView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiltt_connector)
val connectorLayout = findViewById<ConstraintLayout>(R.id.connector_layout)
val quilttConnector = QuilttConnector(this)
quilttConnector.authenticate("<SESSION_TOKEN>")
val quilttConnectorConfiguration = QuilttConnectorConnectConfiguration(
connectorId = "<CONNECTOR_ID>",
institution = "<OPTIONAL_SEARCH_TERM_TO_PREFILL_INSTITUTION>",
oauthRedirectUrl = "<YOUR_HTTPS_APP_LINK>")
webView = quilttConnector.connect(
config = quilttConnectorConfiguration,
onEvent = { eventType, metadata ->
println("Event: $eventType")
println("Metadata: $metadata")
},
onExit = { eventType, metadata ->
println("Event: $eventType")
println("Metadata: $metadata")
},
onExitSuccess = { metadata ->
println("Exit success!")
println("Metadata: $metadata")
Toast.makeText(this, metadata.connectionId, Toast.LENGTH_LONG).show()
finish()
},
onExitAbort = { metadata ->
println("Exit abort!")
println("Metadata: $metadata")
finish()
},
onExitError = { metadata ->
println("Exit error!")
println("Metadata: $metadata")
finish()
})
connectorLayout.addView(webView)
}
override fun onDestroy() {
webView.destroy()
super.onDestroy()
}
}