Client-Side Implementation
The SSL certificates for Braintree Mobile (iOS and Android) SDKs are set to expire on March 30, 2026. 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.
Setup
Before you can add PayPal, you will need to:
- Create, verify, and link your PayPal account in the Braintree Control Panel
- Set up your Android SDK and obtain your client token
- Declare a URL scheme in your AndroidManifest
Get the SDK
Add the following in your app-level build.gradle:
- Kotlin
- Groovy
dependencies {
implementation("com.braintreepayments.api:paypal:5.8.0")
}Initialization
Create a PayPalLauncher inside of your Activity's onCreate(). Then, create a PayPalClient with a Tokenization Key or Client Token and an appLinkReturnUrl that is used to return to your app from the PayPal payment flows.
- Kotlin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// PayPalLauncher must be initialized in onCreate
payPalLauncher = PayPalLauncher()
// can initialize the PayPalClient outside of onCreate if desired
payPalClient = PayPalClient(
context = this,
authorization = "[TOKENIZATION_KEY or CLIENT_TOKEN]",
appLinkReturnUrl = Uri.parse("https://merchant-app.com") // Merchant App Link
)
}Use our Payment Buttons
Alternatively, you can add PayPal payment buttons in your app through the Braintree SDK. The SDK will handle the loading and disable state of the button, call the tokenize methods with your request, and allow you a seamless branded experience in your mobile apps.
This SDK module handles the complete payment flow internally, from launching the PayPal authentication to tokenizing the result, so you only need to provide your request configuration and handle the final nonce.
Get Buttons Module
Add the UIComponents module to your app's build.gradle:
- Groovy
dependencies {
implementation project(':UIComponents')
}Add PayPal button to layout:
- XML
<com.braintreepayments.api.uicomponents.PayPalButton
android:id="@+id/payPalButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:paymentButtonColor="blue" />Add PayPal button integration to the Fragment or Activity:
- Kotlin
class ExampleFragment : Fragment() {
private lateinit var payPalButton: PayPalButton
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
payPalButton = view.findViewById<PayPalButton>(R.id.payPalButton)
payPalButton.initialize(
activityResultCaller = this,
authorization = "[TOKENIZATION_KEY or CLIENT_TOKEN]",
appLinkReturnUrl = Uri.parse("https://merchant-app.com"),
deepLinkFallbackUrlScheme = "com.merchant.app.payments"
)
payPalButton.updatePayPalRequest(PayPalRequest(...))
paypalButton.setLaunchCallback = { launchResult ->
when (launchResult) {
is PayPalPendingRequest.Started-> {
// store pending request to disk
}
is PayPalPendingRequest.Failure -> {
// handle error
}
}
}
}
// handle return to your app
override fun onResume() {
super.onResume()
val pendingRequest = fetchPendingRequest()
if (pendingRequest != null) {
payPalButton.handleReturnToApp(pendingRequest, intent) { payPalResult ->
when (payPalResult) {
is PayPalResult.Success -> {
// handle success
}
is PayPalResult.Failure -> {
// handle failure
}
is PayPalResult.Cancel -> {
// handle canceled
}
}
}
}
// clear pending request
}
}PayPal button supports three colors, that you can set programmatically:
- Kotlin
payPalButton.setButtonColor(PayPalButtonColor.Blue) // Default
payPalButton.setButtonColor(PayPalButtonColor.Black)
payPalButton.setButtonColor(PayPalButtonColor.White)Or via XML:
- XML
app:paymentButtonColor="blue"
app:paymentButtonColor="black"
app:paymentButtonColor="white"Next: Choose your integration
The rest of your configuration will be determined by how you'd like to use PayPal.
- Want a checkout from your cart or product page? Use One-Time Payments.
- Need a combination of features and Pay Later offers? Use Vaulted Payments.
- Want one-click payments for repeat customers? Have a subscription model? Use Recurring Payments.