Interfejs API In-app Billing Version 3 ułatwia integrację rozliczeń w aplikacji z aplikacjami. Funkcje tej wersji obejmują ulepszony synchroniczny przepływ zakupów, interfejsy API umożliwiające łatwe śledzenie własności towarów konsumpcyjnych oraz lokalne buforowanie danych zakupu w aplikacji.
1. Sprawdź w kodzie, jeśli użyto materiałów eksploatacyjnych lub nie
jeśli użyto materiałów eksploatacyjnych, użytkownik może zakupić produkt wielokrotnego czas, tylko google sklep zakup szczegół jeden raz po raz coraz pustą odpowiedź, więc usunąć kod związany z materiałem eksploatacyjnym z Twojej aplikacji.
2. Sprawdź użytkownik już zakupiony przedmiot lub nie korzystając z poniższego kodu
private IInAppBillingService mService = null;
//onCreare
try {
Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND");
serviceIntent.setPackage("com.android.vending");
bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE);
// bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE);
} catch (Exception e) {
e.printStackTrace();
}
// Method
ServiceConnection mServiceConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IInAppBillingService.Stub.asInterface(service);
Log.d("TEST", "mService ready to go!");
checkownedItems();
}
@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};
private void checkownedItems() {
try {
Bundle ownedItems = mService.getPurchases(3, getPackageName(), "inapp", null);
if (ownedItems.getInt("RESPONSE_CODE") == 0) {
ArrayList<String> ownedSkus = ownedItems.getStringArrayList("INAPP_PURCHASE_ITEM_LIST");
ArrayList<String> purchaseDataList = ownedItems.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
if (purchaseDataList.size() > 0) {
// Item already Purchased....
// Manage your in-app view
}else{
// Item not purchased
}
}
} catch (RemoteException e) {
e.printStackTrace();
}
}
Używane powyżej logiką przed punkcie zakupu, jeśli element nie zakupić następnie wywołać w aplikacji getPurchases() inaczej ukryć lub zarządzać in- Widok aplikacji.
Dlaczego nie używasz klasy 'IabBillingHelper'? – azizbekian
@azizbekian sekund już używa IabHelper.QueryInventoryFinishedListener – SANAT
'IabBillingHelper' ma coś takiego jak' getPurchases() ', dlaczego nie użyjesz tego API do zakupów? – azizbekian