querySkuDetailsAsync возвращает пустой список с кодом биллингрезультата SERVICE_UNAVAILABLE

#java #android #in-app-billing #billingclient

#java #Android #в приложении-выставление счетов #billingclient

Вопрос:

После обновления BillingClient до 3.0.0 я начал получать около 20% пользователей, которые видят SERVICE_UNAVAILABLE при запросе покупки в приложении. Список skuDetailsList также пуст. Согласно документам, SERVICE_UNAVAILABLE подразумевает, что сеть отключена, но как клиент возвращается OK с startConnection и отправляет это после попытки запросить детали SKU? Кроме того, я вижу несколько ERROR , это код 6. У меня была какая-то неправильная реализация или я просто показываю пользователю, что произошла ошибка. Попробуйте позже» сообщение? Я также не вижу никаких предупреждений для каких-либо стран в Play Console или чего-либо, что может вызвать это.

 BillingClient billingClient = BillingClient.newBuilder(getContext())
            .enablePendingPurchases()
            .setListener((billingResult, list) -> {})
            .build();

    mBillingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                createSkus(mBillingClient);
            }
        }

        @Override
        public void onBillingServiceDisconnected() {}
    });


private void createSkus(BillingClient billingClient) {
    List<String> skuList = new ArrayList<>();
    skuList.add("pro");
    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
    params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
    billingClient.querySkuDetailsAsync(params.build(),
            (billingResult, skuDetailsList) -> {
                // skuDetailsList empty with BillingResult code 2 (SERVICE_UNAVAILABLE)

                BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                        .setSkuDetails(skuDetailsList.get(0))
                        .build();
                billingClient.launchBillingFlow(activity, billingFlowParams);
            });
}
  

Ответ №1:

У меня была похожая проблема, когда возвращался BillingServiceDisconnected код — к сожалению, моя проблема заключалась в том, что я звонил BillingClient.startConnection дважды.

Также следует отметить еще одну вещь: вам необходимо опубликовать Alpha или Beta версию вашего приложения с недавно обновленной библиотекой, и если вы используете applicationSuffix , удалите это, прежде чем тестировать его в отладочной версии.