После переустановки приложения я не получаю купленный товар ! Что не так?

197
16 октября 2021, 14:50
public class Main2Activity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        mBillingClient();
    }
    private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>();
    private String mSkuId1 = "mSkuId1";
    private String mSkuId2 = "mSkuId2";
    private BillingClient mBillingClient;
    public void mBillingClient() {
        mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() {
            @Override
            public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) {
                if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
                    //сюда мы попадем когда будет осуществлена покупка
                    List<Purchase> purchasesList = queryPurchases();
                    for (int i = 0; i < purchasesList.size(); i++) {
                        String purchaseId = purchasesList.get(i).getSku();
                        if(TextUtils.equals(mSkuId1, purchaseId)) {
                            payComplete();
                        }
                        if(TextUtils.equals(mSkuId2, purchaseId)) {
                            payComplete2();
                        }}
                }
            }
        }).build();
        mBillingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) {
                if (billingResponseCode == BillingClient.BillingResponse.OK) {
                    //здесь мы можем запросить информацию о товарах и покупках
                    querySkuDetails();
                    List<Purchase> purchasesList = queryPurchases();
                    for (int i = 0; i < purchasesList.size(); i++) {
                        String purchaseId = purchasesList.get(i).getSku();
                        if(TextUtils.equals(mSkuId1, purchaseId)) {
                            payComplete();
                        }
                        if(TextUtils.equals(mSkuId2, purchaseId)) {
                            payComplete2();
                        }
                    }
                }
            }

            @Override
            public void onBillingServiceDisconnected() {
                //сюда мы попадем если что-то пойдет не так
            }
        });
    }

    private void querySkuDetails() {
        SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder();
        List<String> skuList = new ArrayList<>();
        skuList.add(mSkuId1);
        skuList.add(mSkuId2);
        skuDetailsParamsBuilder.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
        mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() {
            @Override
            public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) {
                if (responseCode == 0) {
                    for (SkuDetails skuDetails : skuDetailsList) {
                        mSkuDetailsMap.put(skuDetails.getSku(), skuDetails);
                    }
                }
            }
        });
    }
    public void Start(View view) {
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(mSkuDetailsMap.get(mSkuId1))
                .build();
        mBillingClient.launchBillingFlow(this, billingFlowParams);
    }
    public void Start2(View view) {
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(mSkuDetailsMap.get(mSkuId2))
                .build();
        mBillingClient.launchBillingFlow(this, billingFlowParams);
    }

    public void payComplete() {
        SharedPreferences settings = getSharedPreferences("AppSettings", MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean( "loadUr1" , true);
        editor.apply();
    }
    public void payComplete2() {
        SharedPreferences settings = getSharedPreferences("AppSettings", MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putBoolean( "loadUr2" , true);
        editor.apply();
    }

    private List<Purchase> queryPurchases() {
        Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP);
        return purchasesResult.getPurchasesList();
    }
Answer 1

Перешел из комментариев сюда. Вы забыли очень важный момент. без которого все покупки возвратятся пользователю через трое суток. Все покупки нужно подтверждать(!). Потом еще нужно обязательно обращать внимание на статус платежа - он может быть еще незавершенный: просим пользователя зайти и проверить попозже (!).

for( Purchase purchase : purchases ){
   if( purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED ){
      if( !purchase.isAcknowledged() ){ //не подтверждены
           billing_client.acknowledgePurchase(...) //подтверждаем
      }
   }else if( purchase.getPurchaseState() == Purchase.PurchaseState.PENDING ){
   }
}
READ ALSO
Будет ли переполнение double при

Будет ли переполнение double при

Есть переменная типа doubleКаждый раз её увеличивают на 0

203
PhpMyAdmin. Вопросы вместо русских букв

PhpMyAdmin. Вопросы вместо русских букв

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

285
Можете пожалуйста помочь, напишите что у меня не так. Я хочу что бы статьи были слева, а комментарии справа, но ничего не работает

Можете пожалуйста помочь, напишите что у меня не так. Я хочу что бы статьи были слева, а комментарии справа, но ничего не работает

Можете пожалуйста помочь, напишите что у меня не такЯ хочу что бы статьи были слева, а комментарии справа, но ничего не работает

98
Сохранение скриншота работы в Qt C++

Сохранение скриншота работы в Qt C++

Помогите пожалуйстаУ меня есть одна проблема, мне нужно сохранить результаты работы в программе в виде скриншота в папку, где находиться...

144