アプリ内課金機能を備えた Google Play でアプリケーションを公開していますが、新しいバージョンを開発者コンソールにアップロードするまではすべて正常に機能していました。
更新された apk をアップロードすると、Google サーバーは購入した内容を忘れているようです。
すべてが正常に機能するように更新しないと、Google が行ったすべての購入を含むバンドルを返します。
//Service to establish a connection with google play
mServiceConn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
new checkProVersion().execute();
}
};
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
//AsyncTask to check if Pro Version is purchased
class checkProVersion extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
Bundle proBundle = new Bundle();
try {
proBundle = mService.getPurchases(3, getPackageName(), "inapp", null);
} catch (RemoteException e) {
e.printStackTrace();
}
int response = proBundle.getInt("RESPONSE_CODE");
if (response == 0) {
ArrayList<String> ownedSkus = proBundle.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");
ArrayList<String> purchaseDataList = proBundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
ArrayList<String> signatureList = proBundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST");
if (purchaseDataList.size() > 0) {
for (int i = 0; i < purchaseDataList.size(); i++) {
String purchaseData = purchaseDataList.get(i);
String signature = signatureList.get(i);
String sku = ownedSkus.get(i);
if (verifyPurchase(buildPublicKey(), purchaseData, signature)) {
if(sku.equals("name_of_the_sku")) {
buy_pro_btn.setVisibility(View.GONE);
}
}
}
}
}
return null;
}
}
アプリケーションを更新すると、 purchaseDataList.size() は 0 を返します。
ありがとう!!