Я вижу, что метод onProductPurchased
должен вызываться при успешной покупке, однако для меня это не так.
На самом деле он не срабатывает, пока я не совершу покупку, а затем снова не нажму кнопку «Купить». Вот когда он говорит Already purchased
, и я добрых 3 часа искал решение, но не могу, я нашел сообщение SO, объясняющее решение для кого-то, у кого была похожая проблема, поэтому я попытался реализовать как 1-й и второе решение, но оно не сработало, у него было такое же поведение.
Я пропустил некоторые части реализации? Я просмотрел пример приложения, и он выглядит довольно похоже.
package com.the.name.ui;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.anjlab.android.iab.v3.BillingProcessor;
import com.anjlab.android.iab.v3.TransactionDetails;
import com.the.name.R;
public class PremiumFragment extends Fragment implements BillingProcessor.IBillingHandler {
private String LICENSE_KEY = "removedforthesakeofthepost";
BillingProcessor bp;
private Button btnPurchase;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
bp = new BillingProcessor(getContext(), LICENSE_KEY, PremiumFragment.this);
bp.initialize();
View rootView = inflater.inflate(R.layout.fragment_premium, container, false);
btnPurchase = rootView.findViewById(R.id.purchasebtn);
btnPurchase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
bp.purchase(getActivity(), "android.test.purchased", null /*or developer payload*/, null);
}
});
return rootView;
}
@Override
public void onProductPurchased(String productId, TransactionDetails details) {
/*
* Called when requested PRODUCT ID was successfully purchased
*/
Toast.makeText(getContext(), "Already purchased", Toast.LENGTH_SHORT).show();
}
@Override
public void onPurchaseHistoryRestored() {
}
@Override
public void onBillingError(int errorCode, Throwable error) {
}
@Override
public void onBillingInitialized() {
}
@Override
public void onDestroy() {
if (bp != null) {
bp.release();
Toast.makeText(getActivity(), "onDestroy", Toast.LENGTH_SHORT).show();
}
super.onDestroy();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (!bp.handleActivityResult(requestCode, resultCode, data))
super.onActivityResult(requestCode, resultCode, data);
}
}