Apple Pay JS 'openPaymentSetup' doesn't launch setup for all users

I'm in the process of implementing Apple Pay using Braintree for a web store.


The implementation works great for the majority of devices we've tested it on: two iPhone X devices, one iPhone 7, one iPhone 5s, a 9.8" and a 12.9" iPad 2nd Generation. There were a couple more of my co-workers who were able to successfully launch Pay on their personal devices but I'm not sure what iPhone models they were using. On these devices, Apple Pay correctly launches, even for devices which have an empty Wallet or whose user was only just created.


Unfortunately, there is one iPhone X on which nothing happens when pressing the Apple Pay button (IOW, when session.begin is executed). This is not a testing device, it's someone's personal device. I even went as far as to use the returned promise from canMakePaymentsWithActiveCard to launch ApplePaySession.openPaymentSetup if the returned 'success' variable is false. The promise returned from that extra API call also returns false, at which point I believe I've exhausted all options for launching Apple Pay. No exception is thrown so it's difficult to understand what is going wrong exactly. The phone's region settings are for the U.S. as well. I even plugged the phone in my MacBook to take advantage of Web Inspector but nothing of interest was logged to the console.


For the time being, I've added logic to return the user to payment options and to display an error message which recommends attempting a different payment method or to try at a later time. But that is an unfortunate experience to have to impose on a customer committing to a purchase.


Assuming they're in the right region, is there any way to figure out why an Apple Pay enabled device would not launch the payment screen? What kind of restrictions should I be aware of? Any testing tools or API calls I may have overlooked?

Replies

Having the exact same issue. Works fine in sandbox, but doesn't work in production. Thank god we feature flagged it.