Проверьте инвентарь для покупок в приложении Google In

Я новичок в кодировании, и я в основном копирую и вставляю из Google в биллинг приложений Может ли кто-нибудь помочь мне понять, что не так в коде. Обратитесь к этому Android проверяет, была ли покупка в приложении была сделана раньше

Вот моя покупка

public class PurchaseActivity extends CustomMenu {
tk.myessentialoils.ideasapp.util.IabHelper mHelper;
Button buyButton;
String product1SKU;
Boolean VIP=false;
//String product1SKU = "vip_member";//getResources().getString(R.string.product1SKU);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_purchase);

    buyButton = findViewById(R.id.buyButton);
    product1SKU = getString(R.string.product1SKU);
    mHelper = new tk.myessentialoils.ideasapp.util.IabHelper(this, getString(R.string.billing64basecode));

    mHelper.startSetup(new tk.myessentialoils.ideasapp.util.IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(tk.myessentialoils.ideasapp.util.IabResult result) {
            if (!result.isSuccess()) {
                // Oh no, there was a problem.
                Log.d("TAG", "Problem setting up In-app Billing: " + result);
            }
            // Hooray, IAB is fully set up!
        }
    });
/*
        try {
            mHelper.queryInventoryAsync(mGotInventoryListener);
        } catch (IabHelper.IabAsyncInProgressException e) {
            Log.d("TAG","Error querying inventory. Another async operation in progress.");
        }

        SharedPreferences.Editor editor = this.getSharedPreferences("Name", MODE_PRIVATE).edit();
        Log.d("TAG", "checkVIPStatus: " +VIP);
        editor.putBoolean("VIP",VIP);
        editor.apply();
*/
}

@Override
public void onDestroy() {
    super.onDestroy();
    if (mHelper != null) try {
        mHelper.dispose();
    } catch (tk.myessentialoils.ideasapp.util.IabHelper.IabAsyncInProgressException e) {
        e.printStackTrace();
    }
    mHelper = null;
}

public void buyClick(View view) {
    try {
        mHelper.launchPurchaseFlow(this, product1SKU, 10001,
                mPurchaseFinishedListener, "mypurchasetoken");
    } catch (tk.myessentialoils.ideasapp.util.IabHelper.IabAsyncInProgressException e) {
        e.printStackTrace();
        Toast.makeText(this, "Please set up your google account", Toast.LENGTH_SHORT).show();
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode,
                                Intent data)
{
    if (!mHelper.handleActivityResult(requestCode,
            resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

tk.myessentialoils.ideasapp.util.IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
        = new tk.myessentialoils.ideasapp.util.IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(tk.myessentialoils.ideasapp.util.IabResult result,
                                      tk.myessentialoils.ideasapp.util.Purchase purchase)
    {
        if (mHelper == null) return;
        if (result.isFailure()) {
            // Handle error
            Log.d("TAG", "onQueryInventoryFinished: Failed");
        }
        else if (purchase.getSku().equals(product1SKU)) {
            buyButton.setEnabled(false);
            VIP=true;
            storeVIP();
        }

    }
};

tk.myessentialoils.ideasapp.util.IabHelper.QueryInventoryFinishedListener mGotInventoryListener
        = new tk.myessentialoils.ideasapp.util.IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(tk.myessentialoils.ideasapp.util.IabResult result,
                                         tk.myessentialoils.ideasapp.util.Inventory inventory) {

        if (result.isFailure()) {
            // handle error here
            Log.d("TAG", "onQueryInventoryFinished: Failed");
        }
        else {
            // does the user have the premium upgrade?
            boolean mIsPremium = inventory.hasPurchase(product1SKU);
            buyButton.setEnabled(false);// update UI accordingly
            VIP=true;
            storeVIP();

        }

    }
};

private void storeVIP(){
    SharedPreferences.Editor editor = getSharedPreferences("Name", MODE_PRIVATE).edit();
    Log.d("TAG", "checkVIPStatus: " +VIP);
    editor.putBoolean("VIP",VIP);
    editor.apply();
}

}

Вопрос 1
При включении закомментированного кода произошел сбой в моей покупательской активности. mHelper.queryInventoryAsync (mGotInventoryListener);
С ошибкой IAB не настраивается.
Может ли кто-нибудь показать мне, что с этим не так?

вопрос 2
Должен ли я использовать queryInventoryAsync или метод, описанный здесь?
Android: в приложении: проверьте, куплен ли товар
Какой способ проще или эффективнее?

Похоже, вы объявляете mGotInventoryListener, но никогда его не используете ...?

Joachim Isaksson 11.07.2018 09:36

да как это реализовать?

Tony Ming 11.07.2018 09:43
0
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ответ на вопрос 1 Поместите внутри IAB

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_purchase);

    buyButton = findViewById(R.id.buyButton);
    product1SKU = getString(R.string.product1SKU);
    mHelper = new tk.myessentialoils.ideasapp.util.IabHelper(this, getString(R.string.billing64basecode));

    mHelper.startSetup(new tk.myessentialoils.ideasapp.util.IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(tk.myessentialoils.ideasapp.util.IabResult result) {
            if (result.isSuccess()) {
                Log.d("TAG", "onIabSetupFinished: ");
                // Hooray, IAB is fully set up!
                try {
                    mHelper.queryInventoryAsync(mGotInventoryListener);
                } catch (IabHelper.IabAsyncInProgressException e) {
                    Log.d("TAG","Error querying inventory. Another async operation in progress.");
                }
            }
            else {
                // Oh no, there was a problem.
                Log.d("TAG", "Problem setting up In-app Billing: " + result);
            }
        }
    });
}

Ответ на вопрос 2 Это зависит от типа товара, который мы продаем. Для одноразовых транзакций, когда товар нельзя купить дальше, я использовал queryInventoryAsync.

Другие вопросы по теме