Android In-App billing - some cards not accepted - java

I get a lot emails lately that someone tried to pay inside my application with in-app billing and they get a "card not supported" kind of error on the Android in-app billing window. These same people report that they are able to buy other apps directly on Android Market, and with the same card they can't pay in-app.
I tried to contact Google but no response yet (I will post an update if I get an answer).
Have you experienced something similar? And then some people run into the in-app billing bug, where your order is "pending" and you can't do anything. I get negative feedback and this is outside my responsibility.

I think I found a solution for my problem. It was most probably caused after we asked Google to transfer the whole Android account to a new gmail address. I have checked the in-app products in the Android Market console and the the price field was empty on the new account! Only the country specific prices were set. I am pretty sure that the price was set before the account was changed. So I edited the product and entered a price and I asked a customer who previously couldn't pay to try it again. It worked!
So be sure to check if your in-app products have the price set (and not only the country specific price values).
BTW. Google also changed our public key while switching the accounts. People were complaining the whole day that they paid and didn't receive the item. Well Google took the money but the information was delivered signed with a new public key and was not recognized on the devices.

Related

How do you detect if a user's existing subscription's price has changed (Google Play in-app purchase)?

Google has documentation of what to do IF a subscription's price has changed.
You're supposed to use a billing client and launch PriceChangeConfirmationFlow. However, how do you detect if the price has changed in the first place?
What Android library API would tell me that?
The SkuDetails have the price, but the Purchase details don't. They just refer to the SkuDetails using the "productId". I'm looking at the raw json. If the Purchase object had a price in it, I could compare it to the current price in the SkuDetails, but it doesn't.
When you query for the user inventory with the billing API, you get Purchase objects which include the purchase time. A bit of a hacky solution is to look at that date and if it's before the time you changed your price, you initiate the flow with launchPriceChangeConfirmationFlow().

In App purchase price country wise currency conversion

In my android app, I have in app purchase. I used Indian gateway and it is working fine for payments in INR. Since I m planning to release it outside India, so how would I convert price for each country against valid conversion on day of sale of service. I referred few links but did not get any idea to start with. pls guide.
I believe Android handles this for you.
Refer to https://developer.android.com/google/play/billing/billing_admin.html#billing
Provide a price in your home currency, or link the price to an
existing pricing template. Based on the price you enter or the prices
from the pricing template, the system autofills country-specific
prices for different currencies. These generated prices use current
exchange rates and locally relevant pricing patterns (see figure 1).
You can also change prices for other currencies manually, but you can
do this only if a currency is used in one of the target countries for
your app. You can specify target countries for your app on the Pricing
& Distribution page in the Google Play Developer Console.

Android in-app payment for physical items, where to store price information?

I am working on a Android app with the possibility to purchase a physical items. The payment will be implemented with help of the Paypal SDK.
Now i am facing a problem. I only offer two products which can be ordered. First one for say 10 Euro and the second one for 15 Euro.
Where do I have to place the price information which is then to be transfered to Paypal? I donĀ“t think hardcoding the price for my items
into the app is a good approach, but I did not find any better solution for it. I decompiled the app of one competitioner and saw that he also just saves the
price into the app?
Once i hardcode the price information into the app, how should I change it in future? Old app installations will always have
the old price? Lets say it was 10 Euro and now it should be 12 Euro?! How should I change that?
One possibility would be to get the price informaton from my CloudService each time the user starts my app?
What are other solutions for that problem? I want to be flexibel to change the price of my products and to be safe from manipulation.
(I would verifiy the payment with my CloudService and Paypal)
Regards
Store price on your Server this is the best way
You set pricing in Google Play Console.
Go to your application, Store presence, In-app products.
You can add your products and pricing info in there.

How to get SKU code, Buyer Code and CSC in Android Studios

I'm developing an Android App and I need to be able to capture the SKU, Buyer Code and CSC of the device (only Samsung smartphones). I guess I only need the Buyer code (Country Code) and the CSC, but I've been searching and it looks like the SKU code already has these two codes.
I need these codes so I can restrict my App to some specific smartphones, specifically those that where bought in a specific country.
I can't find a way or a class that will help me get these information. I'm already capturing the device's IMEI and model, but not the Buyer Code or CSC.
I appreciate if someone can help me with this.
I found that post providing some Basic information.
How to obtain Firmware version of Android programmatically?
Some data like CSC are given by different ways depending on the manufacturer.
For Samsung for example, you will find information about software in /system/SW_Configuration.xml and about buyer in /system/csc/sales_code.dat and /efs/imei/mps_code.dat

Managing inventory with off site payment systems

I am building a site that sells tickets. I am processing payments through third party payment processors, google checkout. Currently I am limiting purchase time on google checkout to 10 min. If they take longer, the tickets reopen and other users are able to purchase the tickets. The only problem is that Google checkout doesn't know that the timer has expired. The user is able to complete their purchase even though the tickets they are trying to buy have already been bought by someone else. Is there any way to stop google checkout from selling too many tickets? The tickets are GA so if I could limit how many are sold total this would work also. If this is not possible, which seems to be the case, has anyone tackled this problem and found a better solution?
You have several options to deal with inventory issues:
Checkout Store Gadget: offers a simple built-in "inventory update" (using an online spreadsheet). Because Google handles the inventory, an order will not go through if the inventory dropped to zero. Here's the link to the Store Gadget documentation:
http://code.google.com/apis/checkout/developer/Google_Checkout_Store_Gadget_How_To.html
If you don't want to use the Store Gadget, you can use the Checkout Notification and Order Processing APIs and cancel the order if it took to long to complete (i.e. the ticket was sold to someone else). This avoids overselling but will make some customers unhappy.
http://code.google.com/apis/checkout/developer/Google_Checkout_XML_API_Notification_API.html
http://code.google.com/apis/checkout/developer/Google_Checkout_XML_API_Processing.html
Use an inventory buffer to avoid overselling. Keep a few tickets in "reserve" and avoid cancelations and unhappy customers :-)

Categories