2013-03-21 4 views
18

Mam przejściowy problem z rozliczaniem w aplikacji w wersji 3 przy użyciu IABHelper dostarczonego przez Google.IABHelper. queryInventoryAsync nie zwraca żadnych zakupów, ale uruchomienie przepływu produktów kończy się niepowodzeniem z "Elementem już posiadanym"

przed rozpoczęciem nowego zakupu sprawdzam na zakupy z niewykorzystanymi queryInventoryAsync. Jeśli zostanie znaleziony, zużyję niewykonane zakupy i rozpocznę nową transakcję, jeśli nie przejdę bezpośrednio do rozpoczęcia nowej transakcji. 99% czasu działa poprawnie.

Czasami gdy queryInventoryAsync zwraca żadnych niewykorzystanymi zakupów następujące launchPurchaseFlow nie z odpowiedzią: 7: Pozycja już własnością.

INFO [IABHelper] Starting async operation: refresh inventory 
INFO [IABHelper] Querying owned items, item type: inapp 
INFO [IABHelper] Package name: jp.co.mycompany.myapp 
INFO [IABHelper] Calling getPurchases with continuation token: null 
INFO [IABHelper] Owned items response: 0 
INFO [IABHelper] Continuation token: null 
INFO [IABHelper] Querying SKU details. 
INFO [IABHelper] queryPrices: nothing to do because there are no SKUs. 
INFO [IABHelper] Querying owned items, item type: subs 
INFO [IABHelper] Package name: jp.co.mycompany.myapp 
INFO [IABHelper] Calling getPurchases with continuation token: null 
INFO [IABHelper] Owned items response: 0 
INFO [IABHelper] Continuation token: null 
INFO [IABHelper] Querying SKU details. 
INFO [IABHelper] queryPrices: nothing to do because there are no SKUs. 
INFO [IABHelper] Ending async operation: refresh inventory 

INFO [IABHelper] Constructing buy intent for jp.co.mycompany.myapp.myitem, item type: inapp 
INFO [IABHelper] Launching buy intent for jp.co.mycompany.myapp.myitem Request code: 1001 
INFO [IABHelper] Ending async operation: launchPurchaseFlow 
INFO [IABHelper] Purchase canceled - Response: 7:Item Already Owned 

queryInventoryAsync mówi użytkownik nie posiada pozycję, ale launchPurchaseFlow mówi użytkownik robi.

dziwne po oczekiwania (czasami kilka minut, a czasami więcej) problem rozwiązuje się.

Czy ktoś doświadczył czegoś podobnego?

Dla odniesienia używam wersji IABHelper ostatnia aktualizacja 15 marca

+1

Mam ten sam problem. Rozwiązałeś to.Może to być spowodowane przez lokalne buforowanie google – glo

+0

Zdarza się to również, gdy masz czas oczekiwania przed wykonaniem połączenia konsumującego: przedmiot jest kupowany, ale potwierdzenie z google nigdy nie wraca do aplikacji (limit czasu): aplikacja tego nie zna musi skonsumować zakup, chyba że queryInventoryAsync zwróci coś, a zrobi to później dużo później z powodu buforowania. Co za żart. – Frank

+0

I usunęli niezarządzanego, mówiąc, że "myślisz o nich jak zarządzane". Ok, ale dlaczego głupia usługa GooglePlay po kilku godzinach i wyczyszczona pamięć podręczna wciąż mówią, że nie mam zakupów? – Tertium

Odpowiedz

1

Czy Clear cache Google Play usługi w telefonii komórkowej. To może działać dla ciebie.

0

Jestem pewien, że taka sytuacja wskazuje na błąd w aplikacji, ale mimo że Google IAP jest również jednym z czynników, który powoduje problem.

Rozważmy taką sytuację: przedmiot zakupy użytkownika, przetwarzają go na serwerze, a następnie awarii aplikacji, zanim przedmiot został zużyty. Użytkownik wraca do aplikacji, próbujesz przetworzyć przedmiot jeszcze raz, ale IAP zwraca puste Inventory (bez zakupów w ogóle). Użytkownik klika element, który chce kupić, ale otrzymuje ITEM_ALREADY_OWNED. To jest dziwne ?!

Więc nie ma zakupu, ale przedmiot jest już własnością, prawda? To na pewno coś z lokalnym buforowaniem po stronie Google IAP, ale to Twoja aplikacja spowodowała ten problem (awarię aplikacji). Możesz czekać godzinami, ale w większości przypadków to się nie rozwiąże.

Istnieją dwa możliwe rozwiązania. Pierwszy z nich jest dobry dla programistów, który wyczyści dane Google IAP.

adb shell pm clear com.android.vending 

Po kilku sekundach będzie można ponownie kupić przedmiot.

Drugie rozwiązanie jest złe zarówno dla programistów, jak i dla użytkowników końcowych. Musisz ponownie uruchomić urządzenie. Po ponownym uruchomieniu poczekaj 20 sekund do 5 minut, a Twój przedmiot będzie można ponownie kupić. Jeśli taka sytuacja wystąpi na urządzeniu klienta, poproś go o wyczyszczenie danych Sklepu Play ręcznie z poziomu ustawień lub ponowne uruchomienie urządzenia.

Pamiętaj, że główną przyczyną jest awaria aplikacji, która jest niesłuszna z przepływem zakupów IAP przed zużyciem przedmiotu. Napraw to i problem już się nie pojawi.

+0

Nie, jesteś w błędzie. Google Play IAP znów jest zepsuty. Google twierdzi w swoich dokumentach, że jeśli kupiłeś, ale nie skonsumowałeś, zostanie on zwrócony podczas sprawdzania stanu Twoich zasobów reklamowych. Więc żart Google ponownie wszystko zepsuł - testowałem na kilku urządzeniach, nadal twierdzę, że nie mam żadnych zakupów, podczas gdy mam 2 i nie mogę ich ponownie kupić. Oni zabili IAP! Ci dranie. – Tertium

+0

@Tertium Wydaje mi się, że w Twojej aplikacji może być błąd, ponieważ działa on tak samo dla wszystkich innych osób. Zanim obwinisz Google'a za swoje błędy, sprawdź swój kiepski kod, więc może zacznie działać zgodnie z opisem w dokumencie. – tomrozb

+1

Pracuję z Androidem od jego początku w 2009 r. (Był to koszmar, jeśli nie chcesz tylko hakować, ale tworzysz działającą aplikację), ze swoimi IAP - z api v2. Używam IAP w Androidzie, iOS i Windows Store, a ja stworzyłem bezpieczny serwer nie raz, więc wiem, o czym mówię. Google prawie nigdy nie naprawia błędów, po prostu zamyka jedną usługę i otwiera inną, nawet nie próbując zapisać dziedziczenia interfejsu. Zawsze piszę obejścia, aby pozbyć się błędów Google. Google z najnowszą wersją lib i iabhelper po prostu nie robi tego, co powinien! Jaki błąd w mojej aplikacji może uniemożliwić uzyskanie zakupów? – Tertium

Powiązane problemy