Pay Kit iOS: Advanced Operations
Analytics
If you want to monitor your integration to ensure customers are appropritately transitioning through the Cash App Pay funnel then you can track a metric in each of the CashAppPayState’s and build a funnel using the Customer Request ID.
(iOS only) Pay Kit mobile redirect limitations
iOS has a limitation that causes an interstitial page to show, requiring an extra user interaction. This happens if the time taken between the user clicking the Cash App Pay button and Pay Kit attempting to deep link exceeds 1 second.
Issue Description
Universal linking on iOS has a limitation based on an “interaction threshold”. A customer input (for example, touch, click) is required for a universal link to open an app. If the linking is done programmatically, by updating location.href for example, there is a limit of 1 second between the interaction and the actual redirection for a universal link to properly deep link into an app. If the limit is exceeded, the universal link is opened as a normal webpage instead.
When Pay Kit is managing the Cash App Pay button, the 1 second threshold will never be exceeded. However, when using the manage option to control Pay Kit manually, you must take care that the 1 second threshold is not hit.
Examples for how this may happen are: adding additional API calls after the Customer has interacted with the button but before Pay Kit is called, or running other types of form validation. Any such work should be done prior to the customer interacting with the button to avoid any extra work that might exceed the 1 second threshold which will cause the interstitial to show.
Objective-C Examples and States
General Information
Step 1
Step 1 Implement the Cash App Pay Observer Protocol
The CashAppPayObserver protocol contains only one method:
Swift code:
The CAPCashAppPayObserver protocol contains only one method:
Objective-C code:
States
You must update your UI in response to these state changes.
Terminal states
Error States
Informational states
Step 2
When your app is called back by Cash App, post the CashAppPay.RedirectNotification from your AppDelegate or SceneDelegate, and the SDK will handle the rest:
Swift code:
When your app is called back by Cash App, post the [CashAppPay.RedirectNotification] from your AppDelegate or SceneDelegate, and the SDK will handle the rest:
Objective-C code:
Do Not Skip This Step!
This step is vital to ensuring the inetgration works correctly! You may find that in testing environments this step is not required however in production environments you will see a high number of customers not being able to complete their checkout because the SDK never enters the polling state.Step 3
Step 3 Instantiate Pay Kit iOS
For example, from your checkout view controller that implements the CashAppPayObserver protocol, you might instantiate the SDK to be:
Swift code:
Make Sure You Retain The SDK!
You must strongly retain the SDK otherwise you will never recieve state changes.CashAppPayObserver protocol, you might instantiate the SDK to be:
Objective-C code:
Step 4
Step 4 Create a Customer Request
To charge $5.00, your createCustomerRequest call might look like this:
Swift code:
To charge $5.00, your createCustomerRequestWithParams call might look like this:
Objective-C code:
Step 5
Step 5 Authorize the Customer Request
When the customer taps the button, you can authorize the customer request.
Example
Swift code:
When the customer taps the button, you can authorize the customer request.
Example
Objective-C code:
Unhappy Path
If the Customer does not have Cash App installed on their device then they will redirect to a webpage prompting them to download Cash App. In the event the customer does not download Cash App, then the SDK will remain in the polling state. The SDK does not handle this edge case and instead it is up to the implementor to set a reasonable timeout and treat the checkout as failed once that timeout is exceeded. It is suggested to dismiss any loading states and restart the Cash App Pay flow as to not block the customer from checking out.