Google Pay
import { LoadFilesGoogleCodeBlock } from '~/components/CodeBlockInstances/GooglePay/LoadFiles.tsx'
Client-Side Implementation
Choose an integration method
You can accept Google Pay with either our Drop-in UI or a custom integration.
Drop-in integration
Our Drop-in UI is the fastest way to set up your client-side integration. For full details, see Drop-in Setup and Integration.
Custom integration
Get the SDK
Add the following in your app-level build.gradle
:
- Kotlin
- Groovy
dependencies { implementation("com.braintreepayments.api:google-pay:4.49.1") }
Initialization
First, create a BraintreeClient
with a
ClientTokenProvider
or Tokenization Key. Then construct a GooglePayClient
. Before showing the Google Pay
button, use the GooglePayClient#isReadyToPay
method to check whether the user's current
device is compatible. When the result is true
, show the Google Pay button. When the
result is false
, display other checkout options.
- Kotlin
- Java
braintreeClient = BraintreeClient(this, ExampleClientTokenProvider()) googlePayClient = GooglePayClient(this, braintreeClient) googlePayClient.isReadyToPay(this) { isReadyToPay, error -> if (isReadyToPay) { // show Google Pay button } }
CARD
payment method type
is supplied by the Braintree Android SDK as an allowed payment method when making the
IsReadyToPayRequest
. 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
for the IsReadyToPayRequest
, you can follow
Google's documentation
and make the IsReadyToPayRequest
outside of the Braintree Android SDK.
Requesting a payment
Google Pay requires a price to be specified using the 'TransactionInfo' object. Build a
'TransactionInfo' object and provide it at the time of payment, along with your Google-provided
googleMerchantId
for production transactions. Implement a
GooglePayListener
to receive results, and call 'requestPayment' to invoke the payment
flow.
- Java
- Kotlin
public class MyActivity extends AppCompatActivity implements GooglePayListener { private BraintreeClient braintreeClient; private GooglePayClient googlePayClient; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); braintreeClient = new BraintreeClient(this, new ExampleClientTokenProvider()); googlePayClient = new GooglePayClient(this, braintreeClient); googlePayClient.setListener(this); } public void onGooglePayButtonClick(View view) { GooglePayRequest googlePayRequest = new GooglePayRequest(); googlePayRequest.setTransactionInfo(TransactionInfo.newBuilder() .setTotalPrice("1.00") .setTotalPriceStatus(WalletConstants.TOTAL_PRICE_STATUS_FINAL) .setCurrencyCode("USD") .build()); googlePayRequest.setBillingAddressRequired(true); googlePayClient.requestPayment(this, googlePayRequest); } @Override public void onGooglePaySuccess(@NonNull PaymentMethodNonce paymentMethodNonce) { // send paymentMethodNonce.getString() to server } @Override public void onGooglePayFailure(@NonNull Exception error) { if (error instanceof UserCanceledException) { // user canceled } else { // handle error } } }
Get the SDK
Add the following in your app-level build.gradle
:
- Kotlin
- Groovy
dependencies { implementation("com.braintreepayments.api:google-pay:5.2.0") }
Initialization
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.
- 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 } } }
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 payment
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.
- 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 } } } }
GooglePayLauncherCallback
will be invoked. Inside of that callback call
GooglePayClient.tokenize()
, passing in the GooglePayPaymentAuthRequest
.
Handle the GooglePayResult
returned in the GooglePayTokenizeCallback
.
- 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 Integration
- 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 } } } } }