google-pay / compose-pay-button

An Android library that provides a Jetpack Compose wrapper on top of the Google Pay Button API.
Apache License 2.0
29 stars 2 forks source link
google-pay jetpack-compose

Google Pay button for Jetpack Compose

Maven Central

An Android library that provides a Jetpack Compose wrapper on top of the Google Pay Button API.

Pay button variations

Installation

The library is hosted on Maven central and can be used by ensuring the following lines exist in each gradle file:

build.gradle:

repositories {
    mavenCentral()
}

app/build.gradle:

dependencies {
    implementation "com.google.pay.button:compose-pay-button:<version>"
}

Usage

// other imports omitted for brevity
// see full example in the "app" directory

import com.google.pay.button.ButtonTheme
import com.google.pay.button.ButtonType
import com.google.pay.button.PayButton

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

        val onClick = { println("Button clicked") }

        // as per https://developers.google.com/pay/api/android/reference/request-objects#PaymentMethod
        val allowedPaymentMethods = """
            [
              {
                "type": "CARD",
                "parameters": {
                  "allowedAuthMethods": ["PAN_ONLY", "CRYPTOGRAM_3DS"],
                  "allowedCardNetworks": ["AMEX", "DISCOVER", "JCB", "MASTERCARD", "VISA"]
                },
                "tokenizationSpecification": {
                  "type": "PAYMENT_GATEWAY",
                  "parameters": {
                    "gateway": "example",
                    "gatewayMerchantId": "exampleGatewayMerchantId"
                  }
                }
              }
            ]
        """.trimIndent()

        setContent {
            // Default
            PayButton(onClick = onClick, allowedPaymentMethods = allowedPaymentMethods)

            // Customized look
            PayButton(
                onClick = onClick,
                allowedPaymentMethods = allowedPaymentMethods,
                radius = 1.dp,
                modifier = Modifier.width(200.dp),
                theme = ButtonTheme.Light
            )

            // Customized labels
            PayButton(onClick = onClick, allowedPaymentMethods = allowedPaymentMethods, type = ButtonType.Book)
            PayButton(onClick = onClick, allowedPaymentMethods = allowedPaymentMethods, type = ButtonType.Subscribe)
            PayButton(onClick = onClick, allowedPaymentMethods = allowedPaymentMethods, type = ButtonType.Donate)
        }
    }
}