Page 1 of 3 123 LastLast
Results 1 to 10 of 22
  1. #1
    Member
    Join Date
    Nov 2012
    Posts
    149
    Post Thanks / Like
    Mentioned
    0 Post(s)

    Android In-app billing upgrade does not work

    Customers sometimes report that they don't get the In-app billing (IAB) upgrade to full version, eventhough the apps are carefully tested on our test devices. We use managed IAB in 3 apps. We test through alpha testing and we have not found any problems with upgrading. 2 of the apps have IAB version 3 and 1 have IAB version 5. It is the same problem. The apps are developed according to IAB guidelines.

    Why does this happen? Is there some problem with Google's servers, which causes these IAB errors, which prevents some customers from getting the upgrade? Has anyone else encountered the same issue?

    This is a very serious issue for my company, since it results in bad reviews and lower rankings for the IAB apps. We can not use IAB in the upcoming apps, since it seems to be too unreliable. It is also very annoying that IAB seems to be much more reliable on iOS. These are 2 other issues with IAB, which we still haven't found any solution to:

    Consume purchase for In-app billing does not work on Android 6

    In-app purchases are lost after uninstall on "managed" purchase type

    Here are the statistics about this issue:

    app 1: 1215 sold upgrades, 2 complaints from customers who did not get the upgrade

    app 2: 94 sold upgrades, 2 complaints from customers who did not get the upgrade

    app 3: 122 sold upgrades, 4 complaints from customers who did not get the upgrade

    There could be more customers, who did not get the upgrade. The statistics are only for those who complained. 

  2. #2
    Junior Member
    Join Date
    Nov 2013
    Posts
    26
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Quote Originally Posted by MobileVisuals View Post
    In-app purchases are lost after uninstall on "managed" purchase type

    Here are the statistics about this issue:
    app 1: 1215 sold upgrades, 2 complaints from customers who did not get the upgrade
    app 2: 94 sold upgrades, 2 complaints from customers who did not get the upgrade
    app 3: 122 sold upgrades, 4 complaints from customers who did not get the upgrade
    
    That's actually expected (for lack of better word), I have more or less same amount of issues with IAB (around ~300 reported issues out of +50k IAB transactions which is around .5% and it matching your stats, I've also confirmed this with some other developers), what I noticed:
    1) there are sometimes issues w GPS caching of Play servers response which causes IAB to return invalid (outdated) response, this can usually be fixed by querying IAB afer some time (restore purchases button or query purchases on startup come in handy)
    2) there are definitely issues (or maybe by design limitation) with multi-account, if user has more than one account configured in Google Play account used for purchase has to be set as default (primary) at least once (this is probably most common cause of issues with IAB when user is reinstalling app or installing app on secondary/new device)
    3) some other random stuff I have no idea what's root cause but indeed in some cases IAB simply refuses to work (I was even able to confirm that with one user who installed APK with some additional debugs and collected logs: managed in-app item wasn't in list returned by getPurchases although he clearly owned it (which I could confirm in payments.google.com console)

    I've deal with this issues by managing backup licensing provider which uses simple GAE (Google App Engine) server that issues and manages unlock codes, in case of any issues with IAB I simply send unlock code.
    Last edited by oswaldmandus; 2016-09-22 at 10:24 AM.

  3. Likes MobileVisuals liked this post
    Thanks MobileVisuals thanked for this post
  4. #3
    Member
    Join Date
    Nov 2012
    Posts
    149
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Thanks for the info! I have asked about this on Stackoverflow and and many other places, but no one else has answered. Have managed to decrease the ratio of lost purchases through the backup licensing provider and through querying IAB after some time?

    You mention querying purchases on startup. I think I already have done that. Do you mean anything more than what I have done in the code below:

    buyHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
    @Override
    public void onIabSetupFinished(IabResult result) {//$$ this should not be done after upgrading to full version
    if (!result.isSuccess()) {
    Log.v("**Billing ERROR**: ",
    "" + result);
    } else {
    Log.v("PURCHASE SUCCESSFULLY: ",
    "" + result);
    setUpInventory();
    }


    }

    private void setUpInventory() {
    ArrayList<String> moreSkus = new ArrayList<String>();
    moreSkus.add(SKU);
    buyHelper.queryInventoryAsync(true, moreSkus,
    new IabHelper.QueryInventoryFinishedListener() {
    @Override
    public void onQueryInventoryFinished(IabResult result,
    Inventory inv) {

    if (result.isSuccess()) {
    SkuDetails details = inv.getSkuDetails(SKU);
    purchase = inv.getPurchase(SKU);

    } else {
    }
    }
    });
    }

  5. #4
    Member
    Join Date
    Nov 2012
    Posts
    149
    Post Thanks / Like
    Mentioned
    0 Post(s)
    You also mention a backup licensing provider which uses simple GAE server that issues and manages unlock codes. Does that require setting up and running my own server? Isn't that time consuming and expensive?

    Shouldn't Google have informed us about these issues? There is no info about any of this in the IAB documentation. I would never have started with IAB if I knew about these issues in the first place.

    Customers who don't get the upgrade have accused me of scam and fraud in their reviews. How should I deal with this? Is it really worth it to use IAB, when it is so unreliable? None of these issues have ever occurred in my apps, with a separate free and full version. It seems like any app with IAB will get lower reviews and rankings, due to some customers getting angry when they are not getting their upgrades. So it seems like an app with the standard solution of a separate free and full version will reach higher on the ranking charts.

  6. #5
    Junior Member
    Join Date
    Nov 2013
    Posts
    26
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Quote Originally Posted by MobileVisuals View Post
    You mention querying purchases on startup. I think I already have done that. Do you mean anything more than what I have done in the code below
    Looks, OK, the only thing I'd change is to store purchase locally and only re-check once a week or so, there's really no need to re-check license every time user run your app.

    Quote Originally Posted by MobileVisuals View Post
    You also mention a backup licensing provider which uses simple GAE server that issues and manages unlock codes.
    Well it's GAE, with GAE you are hosting your webapp on google servers, they are charging for traffic and storage used but free tier is more than enough to handle this workload.

    Quote Originally Posted by MobileVisuals View Post
    Shouldn't Google have informed us about these issues? There is no info about any of this in the IAB documentation. I would never have started with IAB if I knew about these issues in the first place.
    That's seems like an overkill, I mean we are talking about less than half percent of users affected, you can always issue refund for them. Also reinstalling application sometimes help (dunno why).

    Quote Originally Posted by MobileVisuals View Post
    Customers who don't get the upgrade have accused me of scam and fraud in their reviews.
    I always (and I mean it) reply to such review asking user to contact me directly via FB or e-mail (and include link to my FB profile and my office e-mail. Most of users reply and contact me directly and I can try to resolve this issue somehow (worst case scenario is to issue refund but I rarely have to resort to this thanks to my GAE backup).
    Last edited by oswaldmandus; 2016-09-22 at 03:26 PM.

  7. Likes MobileVisuals liked this post
    Thanks MobileVisuals thanked for this post
  8. #6
    Member
    Join Date
    Nov 2012
    Posts
    149
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Do you use the backup licensing provider only to generate license codes for those customers, who don't get the upgrade through IAB? You then mail them this license code after you have seen their complaints in the reviews?

    I have solved this by sending those customers a special built version, where the upgrade is enabled. It still takes time and energy to respond the reviews and then send them the link to the special built version. Most of the customers don't reply, but I will try your approach with sending them my public FB profile and office e-mail.

  9. #7
    Junior Member
    Join Date
    Nov 2013
    Posts
    26
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Quote Originally Posted by MobileVisuals View Post
    Do you use the backup licensing provider only to generate license codes for those customers, who don't get the upgrade through IAB? You then mail them this license code after you have seen their complaints in the reviews?
    Yes, basically, my GAE webapp is really trivial, it uses standard endpoints architecture (see here: https://cloud.google.com/appengine/d...android-studio, the only thing not covered by this tutorial is authentication) and there is basically two calls: redeem and check, redeem validates code and stores user id (which is available since endpoint is marked as available for logged users) and check test logged user against datastore. I use this for promotions (I can run promotion via FB and offer free licenses that way) and as a backup when there's something wrong with IAB.

    Quote Originally Posted by MobileVisuals View Post
    I have solved this by sending those customers a special built version, where the upgrade is enabled. It still takes time and energy to respond the reviews and then send them the link to the special built version. Most of the customers don't reply, but I will try your approach with sending them my public FB profile and office e-mail.
    Yeah, I've noticed that when I used standard canned reply like "Please contact us directly via e-mail" it really doesn't work but changing this to "Please contact us directly via e-mail: <email_here> or our FB: <fb_here> and we will fix this" effect in much better response ratio. Additionally response phrased that way negates any potential damage as new users which can otherwise be reluctant due to comments with "scam, thieves" and such see that developer is taking active approach to such issues (hence no scamming ).
    Last edited by oswaldmandus; 2016-09-23 at 03:05 PM.

  10. Likes MobileVisuals liked this post
  11. #8
    Member
    Join Date
    Nov 2012
    Posts
    149
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Interesting solution with the GAE webapp! The problem must however be that you can only send the promo codes to those customers, who mail you or write a review with text when the upgrade does not work. The risk is that the customer will write an anonymous 1 star review without any text. Then there is no possibility of contacting the customer.

  12. #9
    Member
    Join Date
    Nov 2012
    Posts
    149
    Post Thanks / Like
    Mentioned
    0 Post(s)
    You wrote that it would be better to query IAB after some time. I assume that you mean calling queryInventoryAsync() once a week or so?

    You gave me the advice to to store the purchases locally. Do you mean storing the purchase object in an Internal Storage, as described here?

    How to save data in an android app - Stack Overflow

  13. #10
    Junior Member
    Join Date
    Nov 2013
    Posts
    26
    Post Thanks / Like
    Mentioned
    0 Post(s)
    Quote Originally Posted by MobileVisuals View Post
    Interesting solution with the GAE webapp! The problem must however be that you can only send the promo codes to those customers, who mail you or write a review with text when the upgrade does not work. The risk is that the customer will write an anonymous 1 star review without any text. Then there is no possibility of contacting the customer.
    That's how it is and the simplest solution for that is not to care - I mean I try to help users with issues but if someone leaves 1 star rating without comment and/or stupid review he/she may GTFO.

    Quote Originally Posted by MobileVisuals View Post
    You gave me the advice to to store the purchases locally. Do you mean storing the purchase object in an Internal Storage, as described here? How to save data in an android app - Stack Overflow
    Yes, I use SharedPreferences to save license state and recheck only once a week.

  14. Thanks MobileVisuals thanked for this post
Page 1 of 3 123 LastLast

Similar Threads

  1. Upgrade - Mobile App Training for Android & iOS
    By ImagiNET Ventures in forum Android Development
    Replies: 0
    Last Post: 2014-11-03, 06:02 AM
  2. Replies: 8
    Last Post: 2014-04-29, 01:04 PM
  3. Replies: 0
    Last Post: 2014-04-25, 12:19 AM
  4. Replies: 0
    Last Post: 2014-02-14, 04:05 PM
  5. Any Android Developers looking for work?
    By Mitch in forum Android Development
    Replies: 10
    Last Post: 2013-12-17, 12:10 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •