In-app purchases with multiple accounts

stefple picture stefple · Mar 2, 2015 · Viewed 7k times · Source

I am facing a problem with in app purchases/subscriptions:

If there are multiple accounts on the device, I can't get the purchases, which were made with the second account. This can sometimes be temporarily fixed, by installing the app from the Google Play web interface, but after a while, the purchases won't appear in the query, forcing the user to reinstall.

I am using the IabHelper classes from this sample.

Doing some Google searches, I found that this bug exists since a while, but unfortunately I couldn't find out if the error is in the IabHelper classes or on Google's side.

I'd like to draw attention to Google, so they provide a proper fix for this, either in the IabHelper classes or in the Play Services or to provide information, how this should be handled.

I am using the code in an app with (at the time of writing) 900.000 active user installs and I have to trigger quite a lot of refunds, due to this.

If there is a fix for this, which I missed, please let me know.

Edit: Sometimes it's not possible at all to retrieve the purchases, even if there is only one account on the phone.

Answer

Lucien Mendela picture Lucien Mendela · Nov 8, 2016

It seems like there isn't a one way road to solve this, but let's try do this.

  1. When the user first install the app get his/her primary email or all accounts on the device

  2. Ask the user what email will they be using for future payment/ or which account is active for google play.

    you can use this code to get the account

    Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
    Account[] accounts = AccountManager.get(context).getAccounts();
    for (Account account : accounts) {
        if (emailPattern.matcher(account.name).matches()) {
            String possibleEmail = account.name;
            ...
        }
    }
    

    Don't forget to ask for permission

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    

    After the user selects the email, you can send a link via email to confirm this email address

  3. Lead all the payment to that specific email.

Method 2

Use the new "Send & Receive money using Gmail" future

  1. Create a email intent and send specific data to the email intent and make payments.

  2. Upon success, send a code to the user email

  3. Use the code to activate whatever purchased they make.

Method 3

Use another payment library or gateway for your in app purchase instead of Google play.