Play Billing - осуществите покупку из приложения, чтобы разблокировать контент и удалить рекламу - PullRequest
0 голосов
/ 10 марта 2020

У меня есть игра, в которой вы играете 1 на 1 против друзей, отвечающих на вопросы. В настоящее время существует 5 наборов вопросов, монетизированных через admob. Я планирую добавить еще 10 комплектов и опцию штрафов, которые будут разблокированы через покупку в приложении (также удаляет рекламу).

У меня работает реализация, но я чувствую, что это не лучший способ и может быть использовано для редактирования SharedPreferences.

Когда пользователь покупает «премиум» через покупку в приложении, я устанавливаю значение "has_premium" в SharedPreferences. В моем фрагменте OnCreateView() я звоню querySkuDetailsAsync() и обновляю это предпочтение соответствующим образом, чтобы убедиться, что все покупки подтверждены и обновлены.

Где бы я ни размещал рекламу, я проверю это значение SharePreference, а затем покажу / спрячу рекламу. Аналогично, при отображении RecyclerView доступных наборов вопросов и штрафов, я снова проверяю это значение SharePreference. Если пользователь премиум-класса, я включаю все элементы в RecyclerView. Если пользователь не премиум, то я отключаю некоторые элементы и вместо этого запускаю BillingFlow при нажатии.

Есть ли лучший способ проверить, что пользователь приобрел статус «премиум», чем сохранение значения SharedPreferences

1 Ответ

0 голосов
/ 14 марта 2020

Перемещая все логики выставления счетов c в BillingRepository, который кэширует покупки в локальной базе данных, затем обслуживая все фрагменты, которые показывают рекламу или премиальные функции через BillingViewModel, нет необходимости в SharedPreferences

Я могу просто позвонить:

billingViewModel = ViewModelProviders.of(this).get(BillingViewModel::class.java)
    billingViewModel.userPurchasedProLiveData.observe(this, Observer {
        it?.apply {
            showProStatus(entitled)
        }
    })

private fun showProStatus(entitled: Boolean) {
        if (entitled) {
            btnMainMenuPro.visibility = View.GONE
            disableAds()
        } else {
            btnMainMenuPro.visibility = View.VISIBLE
            enableAds()
        }
    }

Согласно Документам Google:

Обратите внимание, что соединение с [playStoreBillingClient] создается с использованием * applicationContext. Это означает, что экземпляр не является [Activity] -specifi c. И поскольку это также * не дорого, оно может оставаться открытым для всей жизни [Приложения]. Поэтому вопрос о том, является ли он * (повторно) для каждого [действия] или [фрагмента] или остается открытым для жизни приложения *, является вопросом выбора.

Дополнительная информация и пример могут можно найти здесь: https://github.com/android/play-billing-samples/tree/master/TrivialDriveKotlin

...