Apollo3

Sentry Apollo3 integration provides the SentryApollo3Interceptor and the SentryApollo3HttpInterceptor, which create a span for each outgoing HTTP request executed with an Apollo Kotlin GraphQL client. For easier usage, the integration also provides extension functions on the ApolloClient.Builder.

Install

Copied
implementation 'io.sentry:sentry-apollo-3:6.4.2'

For other dependency managers, see the central Maven repository.

Configure With Extension

Add Interceptors to ApolloClient.Builder using ApolloBuilderExtensions:

Copied
import com.apollographql.apollo3.ApolloClient;
import io.sentry.apollo3.SentryApolloBuilderExtensionsKt;

ApolloClient apollo = SentryApolloBuilderExtensionsKt.sentryTracing(new ApolloClient.Builder())
    .serverUrl("https://your-api-host/")
    .build();

Manual Configuration

When using a custom NetworkTransport, the SentryInterceptors need to be added manually, because HttpInterceptors need to be added to the NetworkTransport:

Copied
import com.apollographql.apollo3.ApolloClient;
import com.apollographql.apollo3.network.http.HttpNetworkTransport;
import io.sentry.apollo3.SentryApollo3HttpInterceptor;
import io.sentry.apollo3.SentryApollo3Interceptor;

ApolloClient apollo = new ApolloClient.Builder()
        .networkTransport(
            new HttpNetworkTransport.Builder()
                .serverUrl("https://your-api-host/")
                .addInterceptor(new SentryApollo3HttpInterceptor())
                .build())
        .addInterceptor(new SentryApollo3Interceptor())
        .build();

Modify or Drop Spans

Spans created around requests can be modified or dropped using SentryApollo3HttpInterceptor.BeforeSpanCallback passed to SentryApollo3HttpInterceptor or the sentryTracing extension function:

Copied
import com.apollographql.apollo3.ApolloClient;
import io.sentry.apollo3.SentryApolloBuilderExtensionsKt;

ApolloClient apollo = SentryApolloBuilderExtensionsKt.sentryTracing(
            new ApolloClient.Builder(),
            (span, request, response) -> {
              if ("LaunchDetails".equals(span.getOperation())) {
                span.setTag("tag-name", "tag-value");
              }
              return span;
            })
        .serverUrl("https://your-api-host/")
        .build();
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) to suggesting an update ("yeah, this would be better").