2017-03-24 8 views
7

Co próbuję?W Zakupie aplikacji: dwa urządzenia z tym samym kontem nie otrzymują takich samych zakupionych przedmiotów.

Kupowanie przedmiotów na jednym urządzeniu z Androidem o skonfigurowanym adresie e-mail X. Kiedy sprawdzam na innym urządzeniu o tym samym skonfigurowanym adresie e-mail. ale przedmioty zakupione na pierwszym urządzeniu nie są dostępne w innym urządzeniu.

Co próbowałem?

Próbowałem, używając:

inappBillingService.getPurchases(InAppBuyActivity.INAPPVERSION, 
        getPackageName(), "inapp", null); 

a także wypróbowane przy użyciu:

IabHelper.QueryInventoryFinishedListener mGotInventoryListener 
    = new IabHelper.QueryInventoryFinishedListener() { 
    public void onQueryInventoryFinished(IabResult result, 
     Inventory inventory) { 

     if (result.isFailure()) { 
     // handle error here 
     } 
     else { 
     // Not getting same purchased on both devices 
     } 
    } 
}; 

jestem generowania podpisaną apk mający taką samą nazwę i kod wersji wersji z wersji playstore.

+0

Dlaczego nie używasz klasy 'IabBillingHelper'? – azizbekian

+0

@azizbekian sekund już używa IabHelper.QueryInventoryFinishedListener – SANAT

+0

'IabBillingHelper' ma coś takiego jak' getPurchases() ', dlaczego nie użyjesz tego API do zakupów? – azizbekian

Odpowiedz

0

Testowałem aplikację, używając dwóch urządzeń. Czasami odzwierciedlają zakupy.

Jeśli usuniemy aplikację i zainstaluję ją ponownie jako nową, to będą tam nowe zakupione produkty. Ale jeśli kupię jeden przedmiot i sprawdzę go na drugim urządzeniu w tym samym czasie, nie zostanie tam odzwierciedlony.

Aplikacja pokazuje elementy już zakupione w drugim urządzeniu, gdy użytkownik spróbuje go kupić. Ale nie jest dostępny w inappBillingService.getPurchases i IabHelper.QueryInventory.

0

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.

+0

Przedmioty nie są konsumpcyjne. Użytkownik kupuje go tylko jednorazowo. Ten sam kod służy do nawiązywania połączeń i robienia zakupów. – SANAT

+0

@ SANAT, czy sprawdziłeś wartość ownedSkus i purchaseDataList? –

+0

Sprawdziłem "INAPP_PURCHASE_ITEM_LIST" od wyniku getPurchases. Pakiet ownedItems = mService.getPurchases (InAppBuyActivity.INAPPVERSION, getPackageName(), "inapp", null); ArrayList ownedSkus = ownedItems.getStringArrayList ("INAPP_PURCHASE_ITEM_LIST"); – SANAT

Powiązane problemy