Loading...
Loading...
The Quiltt Android SDK provides Components for seamless integration of the Quiltt Connector into your Android app.
For full documentation, additional examples and the source code, see the Quiltt Android SDK on GitHub.
android {
defaultConfig {
minSdk = 26 // or greater
}
}
dependencies {
...
implementation("io.quiltt:connector:<INSERT_LATEST_VERSION>")
}
Quiltt always prioritizes OAuth-based connections, which require your user to provide consent on their institution's website or app, and then be redirected back to your app. This means that your application needs to be able to gracefully handle this redirect by returning them to the Connector flow in your app.
For production Environments, you must always pass a https:// URL to appLauncherUrl. This URL must be a valid App Link that can launch your app, like https://app.mydomain.com/connect_bank.
Please see the Android App Links guide for more information.
For local development, you can use http://. We recommend using a tunneling service like Ngrok.
https://*.callback.quiltt.iopackage 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>",
appLauncherUrl = "<YOUR_HTTPS_APP_LINK>")
val token = "<SESSION_TOKEN_FROM_SERVER>"
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 } )
}
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>",
appLauncherUrl = "<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()
}
}