Po raz pierwszy wdrażam rozliczenia w aplikacji w aplikacji na Androida i większość kodu wykonałem prosto z guideline i wszystko zapominam doskonale, dopóki nie pomyślałem o zwrocie kosztów. Przykładowa aplikacja już została zwrócona, ale w dziwny sposób! Zwrot jest odbierany jako aplikacja na zakup, ale z państwa członkowskiego zwrotu, który jest całkowicie zrozumiałe, ale oryginalne źródło wygląda następująco:Zwrot pieniędzy za aplikację w Androidzie
// Count the number of times the product was purchased
while (cursor.moveToNext()) {
int stateIndex = cursor.getInt(2);
PurchaseState state = PurchaseState.valueOf(stateIndex);
// Note that a refunded purchase is treated as a purchase. Such
// a friendly refund policy is nice for the user.
if (state == PurchaseState.PURCHASED || state == PurchaseState.REFUNDED) {
quantity += 1;
}
}
// Update the "purchased items" table
updatePurchasedItem(productId, quantity);
jego pozycja dodając nawet jeśli został zwrócony i nie mam pojęcia, dlaczego to jest? Czy zwracany produkt ma specjalny identyfikator lub czego brakuje? Próbowałem tylko tego z testowaniem produktów, więc nie miałem pojęcia.
metoda updatePurchasedItem usuwa wpis z tabeli, jeśli ilość jest 0, co wydaje się całkowicie w porządku, więc zmieniłem kod do tego
while (cursor.moveToNext()) {
int stateIndex = cursor.getInt(2);
PurchaseState state = PurchaseState.valueOf(stateIndex);
// Note that a refunded purchase is treated as a purchase. Such
// a friendly refund policy is nice for the user.
if(Consts.DEBUG)
Log.v(TAG, state == PurchaseState.PURCHASED ? "purchase" : "refund");
if (state == PurchaseState.PURCHASED) {
quantity += 1;
} else if(state == PurchaseState.REFUNDED) {
quantity = 0;
}
}
// Update the "purchased items" table
updatePurchasedItem(productId, quantity);
ale wątpię, nie byłoby źle kod w przykładowej aplikacji, więc jestem całkowicie pewien, jeśli robię to dobrze!
Jak powinienem sobie z tym poradzić? Proszę pomóż mi!
To może być po prostu błąd. Czy zmienna ilościowa mierzy całkowite zakupy typu przedmiotu, czy po prostu wszystkie zakupy (w tym rodzaj "zwrotu")? Nie zdziwiłbym się, gdyby był to błąd, ponieważ przykład subskrypcji, który istnieje w witrynie dla programistów Androida, nie działa bez poprawek. – BDFun
Ilość odpowiada ilości zakupionych w tym czasie przedmiotów (nie sądzę, że można nawet kupić więcej niż jedną sztukę na raz) iz jakiegoś powodu podniosła ilość, nawet jeśli przedmiot został zwrócony. updatePurchasedItem usuwa wpis, jeśli otrzymuje produkt o wartości 0, co ma wskazywać na refundację, o ile wiem, ponieważ nie używa danych stanu w innym miejscu. Możesz sprawdzić przykład tutaj http://developer.android.com/guide/google/play/billing/billing_integrate.html#billing-download – Ruuhkis