Pitfalls of mobile app payments you don’t even suspect and ways to avoid them

One of the many challenges we face as a web development company is third-party payment gateway integration. Sometimes our clients face issues with such services. Yet, the problems that arise with payment systems aren’t usually connected to the app’s they’re in, but have other, hidden reasons. Let’s discuss the most common questions regarding payments, reveal some of the causes of payment issues and give some recommendations on how to improve app payments for your service.

What you need to know about payments

Google Play Subscriptions and account hold

Google Play Subscriptions are a great way to monetize and grow your app business. Yet Android app and back-end server coordination can be challenging. Often, clients don’t have a clear understanding of how subscriptions work. To facilitate awareness of how different elements of Google Play’s payment system function, the company provides their “Subscriptions 101” video series.

An important subscription feature revealed in the series, which a lot of developers (and clients) don’t consider is “account hold”. This tool is helpful to avoid churn, fix payment issues encountered by a user when subscriber state changes and thus enhance retention. Account hold gives users who have problems with their payment method an opportunity to automatically renew access to an app’s content without resubscribing. For instance, if a credit card expires, the app can use another one to process payment.

Account hold can be enabled in the In-App products section of Google Play Console. A user automatically receives access again when the payment method is fixed. This can encourage users to update their payment method without cancelling their subscription which can eventually lead to greater user retention. Some companies, e.g. CyberLink, registered voluntary churn dropping by 28% and revenue increasing by 10% after implementing account hold functionality.

Recently, Google announced that the account hold feature will be mandatory for all subscriptions, starting from November 1, 2020.

Google Play Billing Library

Timely update of your payment processing libraries makes life easier and helps avoiding several issues. First, the old billing library can just stop working at some point. Second, recent versions have new useful features that older versions are missing. The latest version currently available is 3.0.

After an update over a year ago now, users got the chance to pause a subscription for 1-3 months. This feature works only if the Billing Library is updated. Apps using outdated versions of the library only allow users to cancel subscriptions. Google recommends upgrading the Billing Library annually to deliver optimal purchase experiences for app users.

Testing payments

Proper testing of financial transactions is vital to make sure everything works as intended. Comprehensive payment testing helps:

  • to assure a purchase flow proceeds smoothly and provides positive user experience within the app
  • to implement logic that covers all possible subscription-related scenarios
  • to validate that transactions will behave properly once the app is released

payment testing

Google Play
To test payments within Google Play, QA applies special email addresses to which invitation for beta-testing is sent in advance. With these, the tester can make test subscriptions instead of real ones. For this purpose they use real credit card information, but the card is not charged. Google allows testers to check all logs and install app builds with ease.

When it comes to iTunes, QA uses TestFlight – Apple’s beta testing system. Similarly to the Android platform, iOS developers add testers’ email address to the beta program on iTunes Connect. However, in the case of Apple there’s no opportunity to use real credit card details and real accounts. Also keep in mind that a test account should be associated with the Store of a specific country. Testflight allows us to send test transactions, without incurring charges, with the help of a sandbox testing environment. It allows us to test the product information your application will use in production.

High risk business

Each third-party payment system has a range of goods that can’t be sold on the platform. If you own a business that is classified as “high risk,” the chances are you may not be allowed to use a particular payment system. For instance, PayPal doesn’t allow selling cigarettes, marijuana, adult entertainment and some other doubtful goods. That is why it is essential to check platform requirements before embarking on app development.

Selling digital products

Apple and Google Play Billing services allow the selling of digital products and content within the app. Digital purchases are those for digital goods completed from within the app itself – usually for extra content or premiums. This can include additional levels in a game, additional new features in an app or purchase of songs for a music player. But physical goods like clothing, and appliances can’t be sold with the help of in-app payments and subscriptions. For selling real-world goods you should apply other payment gateways like Apple Pay or PayPal .

digital purchases

Known payment issues and how to address them

When app users encounter any difficulties with in-app purchases, they tend to contact technical support to resolve the issue. We’ve gathered some of the most common issues connected to iTunes, Google Play and Stripe payment platforms and provided information on how we address such problems.

Registered email issue

An issue common across all platforms is connected to registered emails. Users sometimes think that the email which is associated with their Google/iTunes account is their app login. Having made this mistake, a user might register two or even more app accounts (they can set up accounts using different emails) and forget which email address they purchased for.

registration issue

In such a case, app support asks the user to provide a copy of the receipt which they received from Apple/Google/Stripe or other email addresses they might have registered with. Support technicians can then check any emails the user provides, to try to find the account with the paid subscription. Failing this, they provide the user with premium access manually, subject to the provision of the receipt copy which they received from the Store.

Receipt issue

Another payment-related issue happens with auto-renew subscriptions on iTunes and Google Play. Sometimes Google and Apple don’t send user receipts (purchase information) to the app server or the server can’t accept it for some reason. For example, the user account is charged (which is displayed on the console) but the subscription is not active/cancelled on the server side. Sometimes it may take up to an hour for the data to update on the server side.

To solve this problem, customer support manually upgrades the subscription. Later when the server finally receives the data from Google/iTunes, the paid subscription activates automatically. If it’s not the case, technical support asks the user to send them a screenshot of the receipt which they got from the system. To do that the client needs to use the ‘Restore Purchase’ button. If the restoration of the payment doesn’t help, the issue can be fixed by refreshing the data on the server side.

Stripe issues

One of our clients once thought that their project was experiencing a payment issue which stopped some payments from processing, because of a server side issue, which they asked us to fix. As we investigated the issue it turned out the reason was not related to the server, but was in the security controls of the payment system itself; the credit card didn’t undergo validation and the payments were declined.

On third party payment systems, transactions undergo a variety of validations for the sake of security. There are a number of reasons why payments are declined. In fact, every payment system has its own unique set of error messages to indicate the failure of a payment request, for example Stripe sends expired_card or insufficient_funds error codes. In such cases users should contact the bank directly as the issue isn’t connected to the software itself.

It also happens that a payment requires authorization for online/international purchases. In this case we also ask the user to contact their bank or credit card company to authorize the transaction. After the user contacts the credit card company and authorizes the transaction, they try to purchase again and it usually comes through.

Integration of third-party payment systems in an app can be an essential part of your monetization strategy. But you should keep in mind the pitfalls and nuances they involve. Sometimes an emerging problem might happen on the side of the third-party payment system rather than your software, so you should be aware of them before you start the project.