Get started with Kotlin
Add the Gradle plugin
Get the latest version of Apollo Android from the Releases page.
In your app Gradle file, apply the com.apollographql.apollo3
plugin.
Using the plugins DSL:
plugins {
// ...
id("com.apollographql.apollo3").version("x.y.z")
}
Or using the legacy syntax:
buildscript {
// ...
classpath("com.apollographql.apollo3:apollo-gradle-plugin:x.y.z")
}
apply(plugin = "com.apollographql.apollo3")
The plugin is hosted both on the Gradle plugin portal and Maven Central.
By default the plugin generates models in the root package name. You can configure this in the apollo {}
block:
apollo {
packageName.set("com.example")
}
Configure the plugin
apollo {
// instruct the compiler to generate Kotlin models
generateKotlinModels.set(true)
}
Add the runtime dependencies
dependencies {
// The core runtime dependencies
implementation("com.apollographql.apollo:apollo-runtime:x.y.z")
// Coroutines extensions for easier asynchronicity handling
implementation("com.apollographql.apollo:apollo-coroutines-support:x.y.z")
}
Download your schema.json
file
Apollo Android requires your GraphQL server's schema as either an introspection or SDL schema. Usually, it's a schema.[graphqls|json|sdl]
file. This page shows how to obtain a schema from your server using introspection.
Note: If you don't have a GraphQL server yet, you can use the server from the tutorial: https://apollo-fullstack-tutorial.herokuapp.com/graphql.
The Apollo Gradle plugin exposes a downloadApolloSchema
task to help you obtain your schema. Provide this task your server's GraphQL endpoint and the output location for the schema.json
file:
# Create a directory for your GraphQL files:
mkdir -p app/src/main/graphql/com/example/
# --schema is interpreted relative to the current working directory. This example
# assumes the root project directory and an Android app in `app`
./gradlew downloadApolloSchema \
--endpoint="https://your.domain/graphql/endpoint" \
--schema="app/src/main/graphql/com/example/schema.graphqls"
If your GraphQL endpoint requires authentication, you can pass custom HTTP headers:
./gradlew downloadApolloSchema \
--endpoint="https://your.domain/graphql/endpoint" \
--schema="app/src/main/graphql/com/example/schema.graphqls" \
--header="Authorization: Bearer $TOKEN"
Add your query
Put your query in a .graphql
file, next to the schema: app/src/main/graphql/com/example/LaunchDetails.graphql
query LaunchDetails($id:ID!) {
launch(id: $id) {
id
site
mission {
name
missionPatch(size:LARGE)
}
}
}
Build your project, this will generate the models. Either hit the green triangle in Android Studio or type:
./gradlew build
Execute your query
You use an instance of the ApolloClient
class to interact with your server and cache.
To make a query using your generated models:
// First, create an `ApolloClient`
// Replace the serverUrl with your GraphQL endpoint
val apolloClient = ApolloClient.builder()
.serverUrl("https://your.domain/graphql/endpoint")
.build()
// in your coroutine scope, call `ApolloClient.query(...).toDeferred().await()`
scope.launch {
val response = try {
apolloClient.query(LaunchDetailsQuery(id = "83")).toDeferred().await()
} catch (e: ApolloException) {
// handle protocol errors
return@launch
}
val launch = response.data?.launch
if (launch == null || response.hasErrors()) {
// handle application errors
return@launch
}
// launch now contains a typesafe model of your data
println("Launch site: ${launch.site}")
}
What's next
- Execute your first mutation
- Handle custom scalar types
- Factor common patterns using fragments