Skip to content

Commit

Permalink
Add URL to PayPal App Switch Events (#1226)
Browse files Browse the repository at this point in the history
* send analytics with app switch URL
* update unit tests
* add CHANGELOG entry
* PR feedback: update to use copy
* PR feedback: update appSwitchUrl to immutable property
  • Loading branch information
jaxdesmarais authored Dec 5, 2024
1 parent 0cfbf0c commit d0e0e6f
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
* Add `deepLinkFallbackUrlScheme` to `PayPalClient` constructor params for supporting deep link fallback
* LocalPayment
* Make LocalPaymentAuthRequestParams public (fixes #1207)
* PayPal
* Send `url` in `event_params` for App Switch events to PayPal's analytics service (FPTI)

## 5.2.0 (2024-10-30)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ class PayPalClient internal constructor(
*/
private var isVaultRequest = false

/**
* The final URL string used to open the app switch flow
*/
private var appSwitchUrlString: String? = null

/**
* Initializes a new [PayPalClient] instance
*
Expand Down Expand Up @@ -213,6 +218,7 @@ class PayPalClient internal constructor(
val isAppSwitchFlow = !switchInitiatedTime.isNullOrEmpty()

if (isAppSwitchFlow) {
appSwitchUrlString = approvalUrl
braintreeClient.sendAnalyticsEvent(
PayPalAnalytics.HANDLE_RETURN_STARTED,
analyticsParams
Expand Down Expand Up @@ -330,7 +336,10 @@ class PayPalClient internal constructor(
braintreeClient.sendAnalyticsEvent(PayPalAnalytics.TOKENIZATION_FAILED, analyticsParams)

if (isAppSwitchFlow) {
braintreeClient.sendAnalyticsEvent(PayPalAnalytics.APP_SWITCH_FAILED, analyticsParams)
braintreeClient.sendAnalyticsEvent(
PayPalAnalytics.APP_SWITCH_FAILED,
analyticsParams.copy(appSwitchUrl = appSwitchUrlString)
)
}

callback.onPayPalResult(failure)
Expand All @@ -344,7 +353,10 @@ class PayPalClient internal constructor(
braintreeClient.sendAnalyticsEvent(PayPalAnalytics.TOKENIZATION_SUCCEEDED, analyticsParams)

if (isAppSwitchFlow) {
braintreeClient.sendAnalyticsEvent(PayPalAnalytics.APP_SWITCH_SUCCEEDED, analyticsParams)
braintreeClient.sendAnalyticsEvent(
PayPalAnalytics.APP_SWITCH_SUCCEEDED,
analyticsParams.copy(appSwitchUrl = appSwitchUrlString)
)
}

callback.onPayPalResult(success)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import static java.util.Collections.emptyList;

import android.net.Uri;

import androidx.fragment.app.FragmentActivity;
Expand Down Expand Up @@ -626,7 +628,18 @@ public void tokenize_whenPayPalInternalClientTokenizeResult_sendsAppSwitchSuccee
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.HANDLE_RETURN_STARTED, params);
params.setPayPalContextId("EC-HERMES-SANDBOX-EC-TOKEN");
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.TOKENIZATION_SUCCEEDED, params);
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.APP_SWITCH_SUCCEEDED, params);
AnalyticsEventParams appSwitchParams = new AnalyticsEventParams(
"EC-HERMES-SANDBOX-EC-TOKEN",
null,
false,
null,
null,
null,
null,
emptyList(),
"sample-scheme://onetouch/v1/success?PayerID=HERMES-SANDBOX-PAYER-ID&paymentId=HERMES-SANDBOX-PAYMENT-ID&token=EC-HERMES-SANDBOX-EC-TOKEN&switch_initiated_time=17166111926211"
);
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.APP_SWITCH_SUCCEEDED, appSwitchParams);
}

@Test
Expand Down Expand Up @@ -657,7 +670,18 @@ public void tokenize_whenPayPalNotEnabled_sendsAppSwitchFailedEvents() throws JS
AnalyticsEventParams params = new AnalyticsEventParams();
params.setPayPalContextId("SOME-BA");
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.TOKENIZATION_FAILED, params);
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.APP_SWITCH_FAILED, params);
AnalyticsEventParams appSwitchParams = new AnalyticsEventParams(
"SOME-BA",
null,
false,
null,
null,
null,
null,
emptyList(),
"https://some-scheme/onetouch/v1/cancel?token=SOME-BA&switch_initiated_time=17166111926211"
);
verify(braintreeClient).sendAnalyticsEvent(PayPalAnalytics.APP_SWITCH_FAILED, appSwitchParams);
}

@Test
Expand Down

0 comments on commit d0e0e6f

Please sign in to comment.