Obecnie testuję rozliczanie w aplikacji dla przyszłej aplikacji i po pomyślnym „kupieniu” elementu testowego „android.test.purchased” za pierwszym razem otrzymuję teraz kod odpowiedzi 7 za każdym razem, gdy próbuję go kupić ponownie, co oznacza, że mam już ten przedmiot.
12-15 23: 02: 14.149: E / IabHelper (19829): Błąd rozliczeniowy w aplikacji: nie można kupić przedmiotu, odpowiedź błędu: 7: Przedmiot jest już posiadany
Z tego co rozumiem ten zakup ma być zawsze możliwy, prawda? Aby programista mógł przetestować swoją aplikację?
Jeśli nie, jak mogę „zresetować” jego stan do stanu, w którym nie jest właścicielem? Używam pakietu narzędzi z próbki rozliczeń Google w aplikacji.
android
in-app-billing
psykhi
źródło
źródło
Odpowiedzi:
Dodaj ten kod do wątku, aby zainicjować żądanie wykorzystania.
Tutaj dla testu zakupu zakupToken to
I
wtedy konsumpcja się powiedzie.
nie zapomnij też o publicznym udostępnieniu mService w
wtedy byłby możliwy dostęp w ten sposób:
źródło
Nie ma potrzeby pisania żadnego specjalnego kodu zużycia. Po prostu użyj polecenia adb, aby wyczyścić dane Sklepu Google Play:
źródło
Okazuje się, że element android.test.purchased zachowuje się jak zwykły identyfikator. Oznacza to, że jeśli chcesz móc go ponownie kupić, musisz go skonsumować gdzieś w swoim kodzie. Myślę, że dokumentacja Google jest myląca w tej sprawie i że powinni dodać kolejny statyczny identyfikator, który można kupować bez końca w celach testowych.
źródło
billingClient.queryPurchases()
nie zwraca tę niespożytą przedmiot, więc teraz nie mogę spożywać pozycję, ponieważ nie mogę dostaćpurchaseToken
od niegoWersja 3 w aplikacji:
źródło
Wersja 3 - Najszybszy sposób rozwiązania : wyczyszczenie pamięci podręcznej sklepu Google Play sprawi, że „android.test.purchased” będzie ponownie dostępny.
źródło
użyłem powłoki adb:
źródło
W ten sposób możemy skonsumować przedmiot
źródło
android.test.purchase
w pewnym momencie, co powodowało problemy - zadanie inwentaryzacji w rozliczeniach w aplikacji po prostu wyrzuciło mnóstwo błędów i nigdy się nie skończyło. Uruchomienie tego jako jednorazowe rozwiązało problem, więc mogłem wznowić używanie mojego rzeczywistego kodu SKU i kontynuować tak, jak wcześniej. DziękiMoim zdaniem, jeśli twój program nie jest przeznaczony do zużywania produktu, nie musisz modyfikować kodu, aby wyczyścić pamięć zewnętrznego dostawcy. Dzięki temu Twój kod będzie bardziej kruchy i będziesz musiał spędzić dużo czasu na dodawaniu i usuwaniu kodu, który nie należy do twojego oprogramowania, więc wdrażanie takiego rozwiązania jest złym projektem.
Najlepszym rozwiązaniem, które zadziałało, aby wyczyścić android.test.purchased, był
i wtedy
Nie musiałem kasować gotówki i przeglądać ustawień aplikacji ani zmieniać w tym celu kodu. Musiałem dodać adb do zmiennych ścieżki systemu Windows, co było dość proste. Więc tak, musisz użyć adb, którego prawdopodobnie i tak potrzebujesz, więc ...
Po prostu dodaj swój C: \ ... \ android-sdk \ platform-tools; w ścieżce systemu Windows w zmiennych środowiskowych i wyobrażam sobie, że jest to całkiem proste również w systemie Mac i Linux. Mam nadzieję, że pomoże to komuś spędzić kilka dni mniej na wdrażaniu Androida w rozliczeniach aplikacji.
źródło
uninstall
nie trzeba czyścić sku android.test.purchased .Głównym problemem jest to, że musisz skonsumować
android.test.purchased
przedmiot. Ale ten element nie będzie dostępny w Twoim magazynie zapytań, więc nie możesz korzystać z normalnego przepływu.Tak więc, jeśli używasz IabHelper w
IabHelper
klasie, możesz tymczasowo zmienićIInAppBillingService
mService na publiczny, aby był dostępny z Twojego IabHelper.Wtedy w klasie możesz konsumować w ten sposób,
Jeśli się powiedzie, odpowiedź będzie wynosić 0.
Mam nadzieję że to pomoże.
źródło
consumeAsync()
pod numer android.test.purchased . Nie ma z tym problemu.Do celów testowych sugeruję również wstawienie fragmentu kodu, który wyczyści wszystkie zakupione produkty przed wywołaniem metody inicjującej przepływ zakupów gp. Jest to szczególnie wygodne, gdy w danej chwili testujesz tylko jedną pozycję. Np. W ten sposób:
źródło
przejdź do konsoli Google Play i otwórz zakładkę Zarządzanie zamówieniami. Tam możesz zwrócić / anulować zakupy testowe.
źródło
Jeśli jesteś w środowisku testowym
1) W przypadku android.test.purchased, mogę zresetować fałszywą płatność, ponownie uruchamiając urządzenie z Androidem (zużyte zapasy).
2) W narzędziu InApp jest plik o nazwie Security.java, aby tymczasowo wyglądać następująco. Ponieważ płatność testowa (fałszywa) zawsze zwraca fałsz z powodu wyjątku bezpieczeństwa.
Następnie w Twoim OnIabPurchaseFinishedListener wywołaj fechInvForconsumeItem ()
Funkcja fechInvForconsumeItem () to
Consume Listener to
źródło
źródło
W moim przypadku wygląda na to, że Google nie rejestruje zakupu przedmiotu. Zamiast tego lokalna kopia Usług Google Play przechowuje zakup w pamięci podręcznej. W ten sposób, gdy drugie żądanie zostanie wysłane na to samo urządzenie,
android.test.purchased already owned
pojawi się. Jednak użycie innego urządzenia lub zresetowanie urządzenia powoduje wyczyszczenie pamięci podręcznej i umożliwia powtórzenie zakupu.źródło
W moim przypadku wystarczyło wyczyścić pamięć podręczną aplikacji. Po wyczyszczeniu pamięci podręcznej mogłem ponownie zainicjować proces zakupu.
Z mojego urządzenia (4.4.2) przeszedłem do „Ustawienia-> Menedżer aplikacji”. Następnie wybrałem aplikację z zakładki „POBRANE”, a następnie „Wyczyść pamięć podręczną”.
źródło
Na tym polega różnica między materiałami eksploatacyjnymi i nieużywalnymi; Stan przedmiotów nieużywalnych (z czym wydaje się, że masz do czynienia) jest stale śledzony, podczas gdy przedmioty jednorazowe można kupować wielokrotnie. Będziesz musiał przejść do konsoli zarządzania Play i anulować / zwrócić sprzedaż, aby ponownie ją przetestować.
źródło