Developing an App, Part 3: Choosing a Payment Provider

This is the third in a series of posts going through the process of developing an app.

Choosing a Payment Provider

In this post I look at what the app requires from a payment provider, and then look at several payment providers to see what they provide.

What is a Payment Provider?

Payment providers are the interface between your app or website, and banks, credit card companies, etc. They take on the hassle and risk of processing payments, and in return take a cut of each payment. They may also maintain an account balance themselves (e.g. PayPal).

What Does the App Require?

Our app backend requires:

  • Authentication of users
  • A programming interface that it easy to use with Flutter
  • Compliance with App Store and Play Store requirements
  • Managing subscriptions, including:
    • free trials
    • sign up
    • recurring payments
    • cancellation
    • (possibly) gift subscriptions
    • etc.

What Payment Providers Are Available?

Quite a few. Payment processing is a big industry, with unimaginable amounts of money changing hands daily, and many want a slice of the pie.

Security is a big concern, so I’m only looking at the largest mainstream providers, and avoiding those without first party SDKs.

Apple

Payments and subscriptions can be made via the App Store. They also have Apple Pay. The App Store payment policies are here. Of note are sections 3.1.3(b) Multiplatform Services, and 3.1.5(a) Goods and Services Outside of the App. At first glance the policies appear less restrictive than Google’s, but still need to be read thoroughly.

The official in_app_purchase Flutter package (and other 3rd party packages) supports purchases in the App Store.

Google

Payments and subscriptions can be made via the Google Play store. They also have Google Pay. Google require that in app purchases, and subscriptions be made through the Play Store. The exception to this is if you’re selling products or services that are available outside the Play Store, e.g. physical products.

The official in_app_purchase Flutter package (and other 3rd party packages) support purchases in the Play Store.

PayPal

Probably the best known, PayPal processes payments from websites (and apps?). They can also pre-authorise recurring payments.

Braintree is PayPal’s division that “specializes in mobile and web payment systems for e-commerce companies”.

First party SDKs for PayPal and Braintree do not exist at time of writing.

Square

Square have an official Flutter SDK (pub.dev page).

Stripe

Stripe has Android and iOS libraries, but not one for Flutter. 3rd party plugins exist that interface to them.

Conclusions

App Store and Play Store requirements are the biggest factors in selecting payment providers. The iOS app will use Apple’s payment service, and the Play Store app will use Google’s Play Store service. This has the downside, when switching between iOS and Android devices, of needing to resubscribe and pay again.

The second biggest factor is the (lack of) availability of first party Flutter SDKs.

Flutter’s web support has moved into beta. This means the focus of the app can soon become the website, and the apps supplemental; Google’s Play Store rules would then allow 3rd party payment providers. Further investigation on Apple’s rules is needed to verify if they also allow this. It may also require managing subscriptions via a backend.

I will revisit payment providers in the not too distant future, once I have released a stable web app.