In-app billing and license test accounts - android

I am very confused about this, both from the developer site and other similar questions.
I am trying to use V3 in-app billing. Seems to work with the static responses. Want to move on to testing with test purchases using license test accounts.
Basically - it is not working.
A signed app has been uploaded to the developer site (over 6 hours ago), and the app installed on the device, whilst not being signed with the same release key (it's a debug build and key), should work because Android Developers says "you only need to upload your application as a draft application. However, you must sign your application with your release key before you upload it as a draft application. Also, the version number of the uploaded application must match the version number of the application you load to your device for testing". Ie the code on the device apparently doesn't need the same key providing versionCode matches.
My developer console login is - say - a#googlemail.com, and I have a license test address registered (on the developer console) of b#gmail.com. The primary account on my phone is also a#googlemail.com. However I do have a secondary account on there of b#gmail.com. I do NOT want to have to reset my phone and change its one and only account to b#gmail.com.
Android Developers says "The only way to change the primary account on a device is to do a factory reset, making sure you log on with your primary account first" which seems to imply I might have to. It also then says "If the device has more than one account, the purchase will be made with the account that downloaded the app. If none of the accounts has downloaded the app, the purchase is made with the first account" which partially contradicts the first statement. Most of the text on the site appears to apply to pre-V3 code, OS 1.4 etc, so I am not sure how relevant it is.
I notice that Google Play allows me to select the account to use, and both the above show up in the list. Therefore, if I select that second (test) account in Google Play, should that be not sufficient to start testing with that test account?
What actually happens is, whatever account I have selected in Google Play, on starting a purchase I get a message "this version of the application is not configured for billing through Google Play".
Is this because I really do have reset the device and make the primary account b#gmail.com, or because of something else, possibly in the code?

I have some more information now, together with the answer above:
Once I loaded the device with the release signed key the message on a purchase attempt changed to "the publisher cannot purchase own item".
I tried logging in to Google Play with both my accounts and it made no difference. When logged in with the test account I also tried to find the app in the play store. Didn't show up even to the test account (draft app). (I hoped the test account could download it even as draft and therefore following the rules above about multiple accounts I could test purchase with the test account, but no).
Therefore I conclude:
Can only test on a device with an app signed with the same key as the one uploaded to the play store - whatever Android Developers might say.
The ONLY account that can test purchases on a device is the first set (primary) account.
Best therefore to have a completely new account as one's Developer Console account (bit late now).
Would be happy to hear if anyone can contradict the above.

Sign the app you upload to the device with a release key. As far as I know you can't test in-app billing without signing it properly. Actually, last week I tried it as written above and it works.
Hope it helps.

You can have multiple accounts on your devices -- as many as you want. But while testing the app, make sure you don't install it by the app Play Store on your device. Instead, go to Google Chrome, browse to its page on Google Play, and install the app from there. There's a button Install (or Installed).
I guess if you already install the app from account A, then the Android app Play Store will use that account to install next version (or reinstall current version) -- even though you're signed in as another account, like B for example.
However the Google Chrome will just install the app via the current signed in account. This could be a bug and it would be fixed some day. But it's working right now -- when I'm typing this answer. Android team is well known of being lazy for delivering fixes. I hope this "bug" will never be fixed :-)

Related

Testing Google Play Billing With "The Item You Requested is Not Available for Purchase" error

We have an internal testing app for the platform we use to develop our apps and we are working on adding in-app-billing to our platform to support subscriptions that some of our clients may offer.
Integration of the billing library thus far has been pretty easy, and we have our platform test app in the Google Play Console with test subscriptions setup, license testers properly setup, and emails added to an alpha testing list. The app is signed and we use the same signing keystore on both the store and locally for our sandbox app.
In my code, I am able to see the list of products (subscriptions) we get back from the IAB library and I can successfully read the SkuDetails object, but when attempting to purchase them, I am getting an error: "The Item You Requested is Not Available for Purchase". On my test device, I have the same emails setup as we have in both our license testing and alpha testing channel. The version code and name of our sandbox app matches what we have in the store.
I was successfully able to register for internal Alpha testing, however I cannot download the app on the Google Play Store.
The questions I have are:
Why am I unable to download the alpha of our app after signing up for the beta on my phone using the email address we have designated to have access to the beta?
Why are we getting a "The Item You Requested is Not Available for Purchase" error even though we have our subscriptions and licensing setup properly (from our perspective) in both the store and our sandbox app?
This has happened to before, so I am going to share with you some tips to help you with the same.
Tip 1: There are two testing lists and you need to make sure your email is added to both of them. One is app specific and one is your Google Play account specific. You can find the first outside in the play console panel before you select your app. Second is app specific which I assume you have already added.
Tip 2: Make sure you accept the testing invite for your specific email. You can find the testing link in your internal testing track or alpha testing track. Make sure you open your email account and then open the invite link and accept the test.
Tip 3: On your testing device, make sure your email account is the only one logged in. If sometimes you have multiple accounts, that can causes issue with the in app testing.
Tip 4: Sometimes after adding a tester, it takes time for Google's server to mark that user as a test user, so after adding, give it some time like a couple of hours and then make the test.
Tip 5: Make sure the testing account is different than one that you have set up play console with.
Tip 6: Make sure that the versionCode and versionName matches as the build on Play Console and the build is available on required tracks and not in testing mode.
Tip 7: Make sure the product is activated and the SKU IDs are proper.

App cannot be downloaded from Google Play because "another account has joined the beta program"

We recently released an app on google play and after a couple of beta versions I moved it from beta to production. However, some people cannot download the app. Here is an example from Vietnam:
I don't know Vietnamese, but I asked a colleague to translate it and it says:
"Another account, {{email}}, has joined the beta program of this app. The updates for this app could include many beta versions."
Does anybody know how to solve this?
Google Play Store seems to store the application and user account association information in the device's local storage. Clearing the data of the Google Play Store from its app info page should do the trick. Now simply switch the the account that you have joined the beta program with and you should be able to install / update the restricted app version.
If it still doesn't work, repeat the process but this time reboot the device.
Another option is to install the app remotely through google play's website. First remove the app from the device, visit the site with the required google account and install the app in the device of your choice remotely.
This should not block updates, it should only be a warning. The English version of the message is "Another account on this device, XXXX, joined this app’s beta program. Updates to this app might include beta versions."
(Good translation by your colleague).
This is a device with more than one gmail account associated with Google Play. It is probably either shared by multiple people or the user has multiple gmail addresses.
An android device can only ever have one version of an APK (with the same package name) on it installed at once, even with multiple users.
The warning is saying that the current account looking for an update is not enrolled in the beta program for the app. However, another account on the device is enrolled in the beta program. This means if this user does an update, they might get a beta version of the app (as the upgrade as to be appropriate for the other user too). The warning is displayed so the user doesn't unexpectedly get a beta version.
However, it should only be a warning, it shouldn't stop the user updating.
There's a way to bypass this guys, should you want to install the application. On the app list when you search for the desired application, click on the "..." symbol at the upper right corner of the application, there is an "Install" option for you.
There is a button on left top corner, for google play store options. There, change the user to a the one they say that can use the program (different e-mail adress), and you will be able to download the required app.

Android in app subscription testing

I want to test the in app subscription mechanism on android devices(In app billing V3. api).
How can I do this? I saw that testing with static responses is works only with the in app products. The beta/alpha testing supports the in app subscriptions?
Thank you.
You can test your app with in app purchase feature. you have to follow below steps for testing
Upload you final signed apk file to Google play.
Dont publish it
Add in app products
get in app products id and add to code
get base 64 key and add to product
sign apk and upload again
your app should be in draft mode
in you Google play account setting add your test account id
use the device which should have the primary account id similar to the one you have added on Google play test account.
Install signed apk you have uploaded to Google play to your device.
run application and test your features
Since there's no effective way to test subscription cancellation/renewal, I'm trusting Google's documentation that an expired subscription won't appear in purchased items (otherwise, whether cancelled but still valid, original or renewed, I don't care in my case).
To test the rest of my work flow I created a test consumable object so that I can re-buy/cancel it at will in the sandbox. This consumable simulates an active subscription. It's not full end-to-end testing, but given that Google's given us no better way to test subscriptions, it will at least give me a fair amount of confidence that my app behaves as expected, otherwise.
A few notes:
1) You can only test with a signed build. I added android:debuggable="true" to my AndroidManifest.xml (under
<application android:debuggable="true"...)
2) This way I can still connect and debug with breakpoints after installing via adb (you can attach to the process under the Devices view, normally visible in the DDMS perspective, look for the little green bug icon.)
So far, it's behaving as expected. I'm still in the process of testing but if I hit any snags I'll update.
In adittion to #Vaibhav-Agarwal if you only want test your app, you could have problems with the IDs (I have experienced with an app for a client).
In my case, to avoid this situation, I had to add a testing project with another special package (test.xxxx.xxxx.xxxx) and here add some in-app product with a trial of 7 days, then when I canceled a purchase I "only" had to wait 7 days to purchase again this subscription.
In this way also,you never had to make a refund, because the subscription with trial time, you haven't to pay until this trial time finish.
NOTE:
Draft Apps are No Longer Supported, you must use Alpha/Beta tester option
In spanish, you will read: "no se ha podido encontrar el elemento que intentabas comprar"
Google has been enhanced theirs In-app Billing testing options. I write this answer for those who coming through . Now, you can test In-app Billing in Sandbox as other platforms do. In order to do that you have to create license test accounts for authorized users.
In the Developer Console, go to Settings > Account details, then in the License Testing section, add the addresses to Gmail accounts with testing access field.
Notes :
Test subscription purchases recur daily, regardless of the product's subscription period.
Once you’ve added the users as license tester accounts and saved the change, within 15 minutes those users can begin making test purchases of your in-app products.
After you publish your app to an alpha or beta channel, your testers need to opt-in to your app’s alpha or beta test using the provided opt-in URL before they can make test purchases.
License test accounts must be on the user’s Android device. If the device has more than one account, the purchase will be made with the account that downloaded the app. If none of the accounts has downloaded the app, the purchase is made with the first account. Users can confirm the account that is making a purchase by expanding the purchase dialog.
For more visit the official documentation.
But you can test Google Play functionality with an unpublished app using static responses.

User is not eligible for this purchase - in app billing

I'm getting
"User is not eligible for this purchase"
message from google play while trying to purchase as a test.
I've uploaded singed apk in google play, published the billing item(in app product), saved the apk as draft, still getting this error.
Also I was trying to purchase from test user device.
Edit:
The actual reason for this error:
If an unauthorized user try to purchase an item then this message
should appear.
So if the App is not published, a non test user should get this error while try to purchase.
I realized that, Google play takes time to update the changes in app store. So you can not expect the changes immediately. Rather you should wait, in my case it took average 2/3 hours.
Still there may be some unknown error, which I could not figure.
My Cases:
First I was trying to purchase from my test device still got this error, But after waiting some time I didn't get this error. So I think the time was reason here.
Secondly I was trying from a non test device, which was an unauthorized device as the app was not published.
You must use, only, Test Account for Testing purposes. You can not use market account or others for purchasing your app while Testing.
From Android Docs
The synchronous response for a CHECK_BILLING_SUPPORTED request provides a Bundle with a server response code. A RESULT_OK response code indicates that in-app billing is supported; a RESULT_BILLING_UNAVAILABLE response code indicates that in-app billing is unavailable because the API version you specified is unrecognized or the user is not eligible to make in-app purchases (for example, the user resides in a country that does not allow in-app billing). A SERVER_ERROR can also be returned, indicating that there was a problem with the Google Play server.
see details here
This error comes when everything you done is perfect, you have used signed APK with the proper product id, but you have to note that the account that you are using might don't have proper valid credit card details.
So whenever you want to buy any product even with test account, that account should have valid credit details.
You have to specify test account in Edit profile of your publisher account
Licensing & In-app Billing
Test Accounts box
There is a now an additional situation which can result in the "User is not eligible" message.
It comes down to this recent change in the licensing system:
The Licensing keys are now managed for each app individually. To see
the license key for an application, switch to the new design and go
to the Services and APIs for the application
You can no longer use the old "shared" license key when creating new apps. You must switch the Google play developer console to the "new design" and use the license key for each specific app from that app's Services and APIs section.
If you try to use the old shared key the behavior is as follows:
If app is not yet published, tester will receive "User is not
eligible for this purchase" message.
If app is published, user will go through purchase process and
be charged for purchase, but the app will not receive a "purchase success" message.
TL;DR: Make sure you are using the new per-app license key and that you have copied it correctly.
I had the same issue.
I fixed it by uploading apk via "Old Design" of Developer Console.
Steps:
rename application package.
create release build and sign it with your developer key.
upload it to the Developer Console Old Design. You will be asked about switching to the new design for getting public key. DON'T do it.
Perform all next actions from Old Design.
After creatind and publishing inApp content switch to the New Design and take your application security key.
Put new key to your application, rebiuld and resign.
Install your application to the device.
Wait 2-3 hours.
Profit.
lved it. There is some problem in the "New Design" of Developer Console. I deleted the apk and created a new app from "old design" and it worked. Price points(In-App products) got automatically added again as the app package name is exactly the same as old one I deleted.
Also make sured the new public key is used which is app specific now.
Make sure you fill in the #gmail.com address as a licensed test account. Other e-mail addresses associated with your Google account will NOT work.
For the "Unpublisched" app, enter your email account under "Account details" and "Gmail accounts with testing access" in Play Developer Console. Also one need to wait 24 hours.
The android:versionCode set in the Manifest must be the same as the one active in Google Play console
I met this problem and was bothered for one or two day.I delete the test device's gmail and added it again. After then it works.

Android App not allow licensed access to my own App (using the developer account)

Recently I published my first Android App on the Market Place (Trophy-to-Gamerscore Converter). It's a licensed app that worked perfectly during testing and once I publish it - that is to say I was able to access and use my own app on my Android Phone which syncs with my developer account.
I recently accidentally unpublished the app but quickly fixed this and got it straight back on the Market however no when I try and run my app I get a "Unlicensed" message. I tried re-installing and had a play around and found it is responding to the testing environment responses. I installed the exact .APK I uploaded and that is currently published so surely it should be running through Market License Management, see I am the developer and ultimately allowing me access right?
Can anyone help?
If you're the application developer -- and you have your developer account registered as the primary account on the phone -- then you cannot buy your own application.
Instead, Android Market will send whatever debug setting is listed here:
http://market.android.com/publish/editProfile
Note that the APK's package name has to match exactly so that the license server can find it.
Since we always return LICENSED for unpublished apps up until the point they're published, this behavior makes me believe you're not actually logged into the phone using the same account you have on your publisher account. In this case, you'll need to add the account on the phone tho the list of "test accounts" -- also on the page I linked to above.

Categories

Resources