Проверьте, доступен ли пользователю биллинг в приложении через PlayStore - PullRequest
0 голосов
/ 17 октября 2018

Итак, мы хотим поддерживать биллинг внутри приложения через API биллинга Google и через AliPay для Китая.Я написал метод, который должен возвращать либо GooglePlay, либо клиент для выставления счетов AliPay (в зависимости от того, что доступно).Мне нужен способ определить, доступен ли пользователю биллинговый сервис Google, чтобы я знал, какой клиент вернуть.

До сих пор я сталкивался с несколькими разными вариантами и не уверен, какой из нихМне нужно:

  1. Создать ServiceConnection и проверить результат IInAppBillingService.Stub.asInterface(service) .isBillingSupported(3, context.packageName, "inapp")

Вот полный код: https://gist.github.com/first087/9088162

Этонемного утомительно, так как мне нужно подождать, пока служба подключится, получить асинхронный результат и затем вернуть правильный диспетчер биллинга, но на первый взгляд кажется, что это именно то, что мне нужно.

Используйте класс GoogleApiAvailability и проверьте результат isGooglePlayServicesAvailable(context)

Этот параметр намного чище, чем первый, но я не уверен, что он возвращает то, что мне нужно, а такжетребует, чтобы я добавил библиотеку com.google.android.gms:play-services-base в свой проект.

Проверьте, установлено ли приложение GooglePlay на устройстве.

Это наиболее ненадежный вариант (я думаю), поскольку вы можете установить приложение вручную, даже если оно не было предварительно установленопроизводителем, и тогда вы, возможно, не сможете совершать покупки, так как находитесь в Китае, а они этого не позволяют.


Кто-нибудь имел подобный опыт?Как правильно определить, может ли пользователь совершать покупки через PlayStore?

1 Ответ

0 голосов
/ 26 октября 2018

Итак, после тестирования методов в Китае с телефоном, на котором не было установлено приложение PlayStore, мы обнаружили следующее:

с приложением PlayStore и без VPN

  • GoogleApiAvailability.isGooglePlayServicesAvailable() возвращает код 2 - ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED
  • IInAppBillingService.isBillingSupported() возвращает код 3 - BillingResponse.BILLING_UNAVAILABLE

Без PlayStore приложение установлено и без VPN

  • GoogleApiAvailability.isGooglePlayServicesAvailable() возвращает код 9 - ConnectionResult.SERVICE_INVALID
  • IInAppBillingService.isBillingSupported() возвращает код 3 - BillingResponse.BILLING_UNAVAILABLE

При установленном приложении PlayStore и при VPN

  • GoogleApiAvailability.isGooglePlayServicesAvailable() возвращает код 0 - ConnectionResult.SUCCESS
  • IInAppBillingService.isBillingSupported() возвращает код 3 - BillingResponse.BILLING_UNAVAILABLE

Заключение : самый безопасный способ определить, является ли выставление счетовфактически доступно через метод isBillingSupported().Если вы не хотите использовать его «хакерским» способом, показанным в варианте 1 вопроса, вы можете просто создать новый BillingClient и дождаться обратного вызова его startConnection() метода.

Вот гист написанной мной сопрограммы, которая дает вам одну из двух реализаций BillingManager в зависимости от того, доступен ли биллинг в приложении через PlayStore.

...