2013-04-26 10 views
10

Mam już całkowicie bezpłatną aplikację opublikowaną w sklepie Google Play.Rachunki w aplikacji Google Play podające produkt za darmo

Ponieważ aplikacja jest bardziej popularna niż mi się wydawało, postanowiłem zablokować niektóre funkcje i wymagać fakturowania w aplikacji przed jej użyciem. Wolę jednak, aby wszyscy dotychczasowi użytkownicy nadal mogli cieszyć się bezpłatnymi funkcjami premium.

Tak, myślałem o następujące elementy:

  • Prześlij wersję z rozliczeniach w aplikacji za darmo, tak że istniejące użytkownicy będzie „zakup” za darmo.
  • Po pewnym czasie rozpoczyna się naliczanie opłat za przedmiot, ale od już posiadacze są już właścicielami przedmiotów premium, ponieważ nie byliby ranni.

Czy istnieje sposób na przyznanie niektórym użytkownikom elementu "za darmo"? W dokumentacji rozliczeń w aplikacji napisano, że musi istnieć cena wszystkich elementów rozliczeniowych w aplikacji.

Odpowiedz

3

Nie ma bezpośredniego sposobu zrobienia tego z google. będzie mieć 2 testowych przypadkach: -

  1. Istniejący użytkownik
  2. Nowy użytkownik Trzeba przechowywać unikalny user-id na serwerze i gdy zaimplementować w aplikacji w aplikacji wysłać ten identyfikator użytkownika do listy serwer.

Przypadek 1: - Twój serwer będzie pasował do istniejącej bazy danych, jeśli pasuje do identyfikatora, który zwróci komunikat o powodzeniu.

Przypadek 2: - Dla nowych użytkowników wraz z tym identyfikatorem użytkownika aplikacja powinna przesłać token zakupu na serwer w celu weryfikacji i po zweryfikowaniu zakupu, na jaki serwer powinien wysłać wiadomość powodzenia.

Typowe zadanie: - Powszechne zadanie: - Po uruchomieniu aplikacji należy zawsze wywołać metodę restoreTransaction(), po tym jak otrzymasz listę z google zawierającą informacje o już zakupionych przedmiotach, a odblokujesz tę zawartość. Upewnij się, że masz implementację weryfikacji serwera w swojej aplikacji.

+0

Dziękuję za odpowiedź. Nie myślałem o zachowaniu unikalnego identyfikatora użytkownika. To świetny pomysł! Jednak nie jest to dla mnie przydatne, ponieważ aplikacja jest tylko klientem i nie mam czasu na wdrożenie strony serwera teraz. Przyjmuję twoją odpowiedź, ponieważ tak to powinno być zrobione. Rozwiązaniem dla mnie byłoby po prostu nie obciążać użytkowników, którzy dokonali aktualizacji, ale następnym razem, gdy zainstalują aplikację na innym urządzeniu, zostaną obciążeni. – liovka

+0

w jaki sposób zamierzasz sprawdzić, czy użytkownik zaktualizował aplikację lub czy ją zainstalował, ponieważ kiedy użytkownik uaktualnia aplikację, pełny plik apk jest pobierany z Google Play i ponownie instaluje aplikację na urządzeniu w taki sam sposób jak nową instalację aplikacji? – Ankit

+0

Jestem świadomy tego, o czym piszesz. Czy nie uważasz, że uczciwy kompromis może zacząć obciążać klientów za każdą nową instalację? – liovka

2

Oto jak można częściowo osiągnąć to, czego pragniesz, bez użycia serwera:

  1. Aktualizacja aplikacji z nową wersją, która będzie pisać unikalną wartość dla SharedPreferences. Ta wartość powinna być hashem identyfikatora, który jest unikalny dla urządzenia (lub co najmniej, że wiele innych urządzeń mogłoby współdzielić). Powodem, dla którego wartość powinna być względnie unikatowa, jest zapobieganie jej udostępnianiu późniejszym użytkownikom. Jeśli chcesz, aby przetrwał ponowną instalację, możesz również zapisać go w obszarze pamięci zewnętrznej użytkownika, który nie zostanie usunięty po zainstalowaniu aplikacji.

  2. Zaczekaj wystarczająco dużo czasu, aby większość obecnych użytkowników zaktualizowała się do nowej wersji. W trakcie tego procesu nowi użytkownicy podczas tej fazy otrzymają unikalną wartość w swoich SharedPreferences.

  3. wydania nowej wersji, która robi nie napisać unikatowy identyfikator, i który umożliwia funkcje, które chciałbyś ładować tylko jeśli albo identyfikator jest obecny, lub jeśli użytkownik zapłacił za pośrednictwem rozliczanie w aplikacji.

To nie jest idealne, ale może to pozwolić przynajmniej najbardziej Twoich obecnych użytkowników nadal dostęp do funkcji.

Nie wiem, czy naruszyłoby to Twoją umowę z Google Play, i sam musisz sprawdzić to zagadnienie. Fakt, że przedstawiłeś aplikację obecnym użytkownikom jako bezpłatną, a teraz chcesz pobierać opłaty za niektóre z jej funkcji, może być postrzegany jako wprowadzanie w błąd, chyba że dziadek w dotychczasowych użytkownikach, a podejście, które właśnie opisałem, nie gwarantuje tego wszystkim obecnym użytkownikom zostanie przyznany dostęp.

Należy zauważyć, że podejście zaproponowane w innej odpowiedzi wymagającej użycia własnego serwera wydaje się mieć te same problemy, ponieważ konieczne jest wydanie nowej wersji aplikacji z kodem umożliwiającym komunikację z serwerem. nie ma możliwości zmuszenia obecnych użytkowników do aktualizacji do nowej wersji w określonym przedziale czasu. W przeciwnym razie, w jaki sposób zbierzesz unikalne identyfikatory identyfikujące obecnych użytkowników w bazie danych Twojego serwera, ponieważ użytkownicy darmowych aplikacji nie są ogólnie znani programistom?

Czystsze podejście byłoby dodać nowych funkcje integrujące ściśle z istniejącymi funkcjami, czyniąc je bardziej wartościowe, a także podjęciem zawartości już wprowadzane za pomocą starych możliwości bardziej wartościowe. Możesz nadal udostępniać istniejące funkcje bezpłatnie, ale pobierać opłaty za nowe funkcje.

Dzięki temu podejściu żaden bieżący użytkownik nie zostałby pozbawiony funkcjonalności, a także mógł pobierać opłatę od aktualnych użytkowników (a nie tylko od nowych użytkowników) za funkcje o wartości dodanej. Korzystanie z tego podejścia może być nie tylko bardziej przyjemne dla użytkowników, ale także potencjalnie bardziej opłacalne dla Ciebie, ponieważ będziesz mieć całą obecną bazę użytkowników jako potencjalnie płacących klientów.

Być może uważasz, że obecna popularność Twojej aplikacji może wynikać z funkcji, które chcesz teraz obciążyć. Możesz więc nie przyciągać ciągłego strumienia nowych użytkowników, gdy te funkcje nie będą już darmowe.

+0

dzięki za dokładną odpowiedź. Planuję zrobić coś podobnego do tego, co zaproponowałeś. 1) Będę śledzić istniejących użytkowników (w miarę możliwości) za pomocą SharedPreferences. Nie muszę nawet wydawać wersji pośredniej, ponieważ wiem, czy użytkownik został zaktualizowany, czy nie, sprawdzając niektóre dane w bazie danych sqlite, w której przechowywana jest aplikacja. 2) Dodam fajne rzeczy do funkcji, które mam zamiar naładować. – liovka

+1

Pamiętaj tylko, że SharedPreferences znikną podczas deinstalacji, a także, jeśli użytkownik ma wiele urządzeń, wartość może nie być automatycznie dostępna na tych urządzeniach, jeśli zostanie zainstalowana później. Ładowanie całkowicie nowych funkcji wciąż wydaje mi się najczystszym podejściem do mnie, ale wiesz, że twoja aplikacja i twoi użytkownicy są znacznie lepsi, więc może być tak, że w twoim przypadku dobrym pomysłem jest rozróżnienie obecnych i przyszłych użytkowników. Obawiam się, że dalsze rozróżnianie pomiędzy Twoimi klasami użytkowników może przerodzić się w prawdziwy ból głowy. – Carl

+0

Ponadto, jeśli używasz istniejącej wartości zapisanej w lokalnej bazie danych w celu rozróżnienia między "grandfathered" i "new users", istnieje możliwość, że taka wartość może zostać sfałszowana, chyba że masz już proces sprawdzania poprawności (np. opisane w mojej odpowiedzi). – Carl

0

Chociaż nie jest to możliwe w przypadku aplikacji ze znaczną liczbą pobrań, od stycznia 2016 r. Można przyznać do 500 kodów promocyjnych na aplikację na kwartał.