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();
}
Перешел из комментариев сюда. Вы забыли очень важный момент. без которого все покупки возвратятся пользователю через трое суток. Все покупки нужно подтверждать(!). Потом еще нужно обязательно обращать внимание на статус платежа - он может быть еще незавершенный: просим пользователя зайти и проверить попозже (!).
for( Purchase purchase : purchases ){
if( purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED ){
if( !purchase.isAcknowledged() ){ //не подтверждены
billing_client.acknowledgePurchase(...) //подтверждаем
}
}else if( purchase.getPurchaseState() == Purchase.PurchaseState.PENDING ){
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня в phpMyAdmin вместо русских букв в таблице отображаются знаки вопросаЯ понимаю, что это проблемы с кодировкой, но не могу перекодировать...
Можете пожалуйста помочь, напишите что у меня не такЯ хочу что бы статьи были слева, а комментарии справа, но ничего не работает
Помогите пожалуйстаУ меня есть одна проблема, мне нужно сохранить результаты работы в программе в виде скриншота в папку, где находиться...