Google Pay

Client-Side Implementation

Important

The SSL certificates for all Braintree SDKs are set to expire by June 30, 2025. This will impact existing versions of the SDK in published versions of your app. To reduce the impact, upgrade the Android SDK to version 4.45.0+ or version 5.0.0+ for the new SSL certifications.

If you do not decommission your app versions that include the older SDK versions or force upgrade your app with the updated certificates by the expiration date, 100% of your customer traffic will fail.

Get the SDKAnchorIcon

Add the following in your app-level build.gradle:

  1. Kotlin
  2. Groovy
dependencies {
    implementation("com.braintreepayments.api:google-pay:5.2.0")
}

InitializationAnchorIcon

Create a GooglePayLauncher inside of your Activity's onCreate(). The GooglePayLauncherCallback is invoked after the buyer leaves the Google Pay Flow.

Create a GooglePayClient with a Tokenization Key or Client Token.

Before showing the Google Pay button, use the GooglePayClient.isReadyToPay() function to check whether the user's current device is compatible. When the result is GooglePayReadinessResult.ReadyToPay, show the Google Pay button. When the result is not GooglePayReadinessResult.ReadyToPay, display other checkout options.

  1. Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // GooglePayLauncher must be initialized in onCreate
    googlePayLauncher = GooglePayLauncher(this) {
        // Handle GooglePayPaymentAuthResult
    }

    // can initialize the GooglePayClient outside of onCreate if desired
    googlePayClient = GooglePayClient(this, "[TOKENIZATION_KEY or CLIENT_TOKEN]")
    googlePayClient.isReadyToPay(this) { googlePayReadinessResult ->
        if (googlePayReadinessResult is GooglePayReadinessResult.ReadyToPay) {
            // show Google Pay button
        }
    }
}

You will need a button element on your page styled according to Google's brand guidelines.

The CARD payment method type is supplied by the Braintree Android SDK as an allowed payment method when calling isReadyToPay(). It also provides the PAYPAL payment method type if you are using Google Pay v2 and currently accept PayPal payments. If you desire different behavior than isReadyToPay(), you can follow Google's documentation and make the IsReadyToPayRequest outside of the Braintree Android SDK.

Requesting a paymentAnchorIcon

After the user clicks the Google Pay button, create a GooglePayRequest and call GooglePayClient.createPaymentAuthRequest() and handle its result. If the result is ReadyToLaunch, invoke GooglePayLauncher.launch() to launch the Google Pay flow. If the result is Failure, handle the error.

  1. Kotlin
private fun onGooglePayButtonClick() {
    val googlePayRequest = GooglePayRequest(
        currencyCode = "USD",
        totalPrice = "12.34",
        totalPriceStatus = GooglePayTotalPriceStatus.TOTAL_PRICE_STATUS_FINAL
    )

    googlePayClient.createPaymentAuthRequest(googlePayRequest) { googlePayPaymentAuthRequest ->
        when (googlePayPaymentAuthRequest) {
            is GooglePayPaymentAuthRequest.ReadyToLaunch -> {
                googlePayLauncher.launch(googlePayPaymentAuthRequest)
            }

            is GooglePayPaymentAuthRequest.Failure -> {
                // Handle error
            }
        }
    }
}

When the user completes or cancels the Google Pay flow, the GooglePayLauncherCallback will be invoked. Inside of that callback call GooglePayClient.tokenize(), passing in the GooglePayPaymentAuthRequest. Handle the GooglePayResult returned in the GooglePayTokenizeCallback.

  1. Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    googlePayLauncher = GooglePayLauncher(this) { googlePayPaymentAuthResult ->
        googlePayClient.tokenize(googlePayPaymentAuthResult) { googlePayResult ->
            when (googlePayResult) {
                is GooglePayResult.Failure -> { /* handle error */ }
                is GooglePayResult.Cancel -> { /* handle cancel */ }
                is GooglePayResult.Success -> { /* handle nonce */ }
            }
        }
    }
}

Complete IntegrationAnchorIcon

  1. Kotlin
class MyActivity : AppCompatActivity() {

    private lateinit var googlePayLauncher: GooglePayLauncher
    private lateinit var googlePayClient: GooglePayClient

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // GooglePayLauncher must be initialized in onCreate
        googlePayLauncher = GooglePayLauncher(this) { googlePayPaymentAuthResult ->
            googlePayClient.tokenize(googlePayPaymentAuthResult) { googlePayResult ->
                when (googlePayResult) {
                    is GooglePayResult.Failure -> { /* handle error */ }
                    is GooglePayResult.Cancel -> { /* handle cancel */ }
                    is GooglePayResult.Success -> { /* handle nonce */ }
                }
            }
        }

        // can initialize the GooglePayClient outside of onCreate if desired
        googlePayClient = GooglePayClient(this, "[TOKENIZATION_KEY or CLIENT_TOKEN]")
        googlePayClient.isReadyToPay(this) { googlePayReadinessResult ->
            if (googlePayReadinessResult is GooglePayReadinessResult.ReadyToPay) {
                // show Google Pay button
            }
        }
    }

    private fun onGooglePayButtonClick() {
        val googlePayRequest = GooglePayRequest(
            currencyCode = "USD",
            totalPrice = "12.34",
            totalPriceStatus = GooglePayTotalPriceStatus.TOTAL_PRICE_STATUS_FINAL
        )

        googlePayClient.createPaymentAuthRequest(googlePayRequest) { googlePayPaymentAuthRequest ->
            when (googlePayPaymentAuthRequest) {
                is GooglePayPaymentAuthRequest.ReadyToLaunch -> {
                    googlePayLauncher.launch(googlePayPaymentAuthRequest)
                }

                is GooglePayPaymentAuthRequest.Failure -> {
                    // Handle error
                }
            }
        }
    }
}

If you accept cookies, we’ll use them to improve and customize your experience and enable our partners to show you personalized PayPal ads when you visit other sites. Manage cookies and learn more