Ограничить функциональность с помощью подписок Android - PullRequest
1 голос
/ 30 июня 2019

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

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

public void launchBillingFLow(@SkuType String skuType, String productId) {

    Runnable launchBillingRequest = () -> {

        BillingFlowParams mBillingFlowParams;

        mBillingFlowParams = BillingFlowParams.newBuilder()
                .setSku(productId)
                .setType(skuType)
                .build();

        mBillingClient.launchBillingFlow((Activity) context, mBillingFlowParams);

    };

    executeServiceRequest(launchBillingRequest);

}

Но что, если пользователь уже подписан?Таким образом, вопрос в том, как я могу проверить, подписан ли пользователь, и нажать кнопку «Выполнить», а если нет, отобразить окно биллинга.Могу ли я получить эту информацию, только если пользователь подключен к Интернету?Нужно ли хранить эту информацию на устройстве?

1 Ответ

2 голосов
/ 30 июня 2019

Используйте эту подписку для получения информации о покупке -

  1. Чтобы проверить, куплена ли уже подписка (responseCode == 7)
  2. Получить весь список puschase с помощью purchaseasesResult.getPurchasesList ()
  3. Получить ответ сразу после успешной подписки подписки с помощью метода onPurchasesUpdated
  4. Показать поток биллинга в приложении с помощью BillingFlowParams.Builder

        mBillingClient.startConnection(new BillingClientStateListener() {
                @Override
                public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
    
                    if (billingResponseCode == BillingClient.BillingResponse.OK) {
                        // The billing client is ready. You can query purchases here.
    
                        final Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.SUBS);
                        for (Purchase sourcePurchase : purchasesResult.getPurchasesList()) {
                            if (sourcePurchase != null) {
    
                                ConsumeResponseListener listener = new ConsumeResponseListener() {
                                    @Override
                                    public void onConsumeResponse(final int responseCode, final String purchaseToken) {
                                        // Log.d("anupam2", responseCode + "  <------->  "+ purchasesResult.getPurchasesList() + "  <------->  " + purchaseToken);
                                    }
                                };
                                mBillingClient.consumeAsync(sourcePurchase.getPurchaseToken(), listener);
                            } else {
    
                            }
                        }
    
                        if (purchasesResult.getPurchasesList().size() > 0) {
                            //  Log.d("anupam3", purchasesResult.getPurchasesList().size() + "");
    
                        } else {
                            //  Log.d("anupam4", purchasesResult.getPurchasesList().size() + "");
                            BillingFlowParams.Builder builder = BillingFlowParams.newBuilder().setSku("234r23446").setType(BillingClient.SkuType.SUBS);
                            int responseCode = mBillingClient.launchBillingFlow(SplashActivity.this, builder.build());
                            if (responseCode == 7) {
    
                                //Item already purchased
                            }
                        }
                    }
                }
    
                @Override
                public void onBillingServiceDisconnected() {
                    // Try to restart the connection on the next request to
                    // Google Play by calling the startConnection() method.
                    Toast.makeText(SplashActivity.this, "Failed", Toast.LENGTH_LONG).show();
                }
            });
    
    mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() {
                @Override
                public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
    
                    //  Log.d("anupam", responseCode + "");
                    if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
                        for (Purchase purchase : purchases) {
                        //List of purchases
                        }
                    } else if (responseCode == BillingClient.BillingResponse.USER_CANCELED) {
                        Toast.makeText(SplashActivity.this, "Sorry, you have canceled purchase Subscription.", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(SplashActivity.this, "Sorry, some error occurred.", Toast.LENGTH_SHORT).show();
                    }
                }
            }).build();
    

Теперь вы можете вызвать это на своем заставке и сохранить значение, используя sharedpreference или глобальную переменную, в своем приложении на основе кода ответа. Проверьте, является ли код ответа 7 для идентификатора вашей подписки или нет. В случае подозрения (для responseCode == 7 вы сохранили значение как подозрительное), покажите дополнительные функции, иначе нет.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...