0

我正在尝试在应用购买中使用,在我想购买我的项目后,我在“IabHelper.OnConsumeFinishedListener mConsumeFinishedListener”的结果中收到以下错误,我的项目不是订阅!

result.getmessage 如下:“'subs' 类型的项目不能被消费。(响应:-1010:消费尝试无效)”

我该怎么办 ?

我的完整代码:

公共类 BuyCoins 扩展 Activity{

String TAG="TESTPURCHASE";
IabHelper mHelper;
static final String ITEM_100_SKU = "ir.e_rundev.brainwars.test";
static final String ITEM_500_SKU = "ir.e_rundev.brainwars.test2";
static final String ITEM_1000_SKU = "ir.e_rundev.brainwars.1000coins";
String ITEM_SKU="";





protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.buy_coins);

    Swarm.setActive(this);



    String base64EncodedPublicKey =
            "(I HAVE MY CODE HERE)";

    mHelper = new IabHelper(this, base64EncodedPublicKey);

    mHelper.startSetup(new
                               IabHelper.OnIabSetupFinishedListener() {
                                   public void onIabSetupFinished(IabResult result)
                                   {
                                       if (!result.isSuccess()) {
                                       //    Log.d(TAG, "In-app Billing setup failed: " +
                                                 //  result);
                                       } else {
                                        //   Log.d(TAG, "In-app Billing is set up OK");
                                       }
                                   }
                               });

    Button btn100 = (Button) findViewById(R.id.btn_Buy_100);
    Button btn500 = (Button) findViewById(R.id.btn_Buy_500);
    Button btn1000 = (Button) findViewById(R.id.btn_Buy_1000);

    btn100.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ITEM_SKU=ITEM_100_SKU;
            buyCoin(view);
        }
    });

    btn500.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ITEM_SKU=ITEM_500_SKU;
            buyCoin(view);
        }
    });

    btn1000.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           // ITEM_SKU=ITEM_1000_SKU;
           // buyCoin(view);

        }
    });


}

public void buyCoin (View view) {
    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,
            mPurchaseFinishedListener, "mypurchasetoken");
}

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


IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener
        = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result,
                                      Purchase purchase)

    {
        if (result.isFailure()) {
            // Handle error
            return;
        } else if (purchase.getSku().equals(ITEM_100_SKU)) {
            consumeItem();
            Log.d(TAG, "Here"+purchase.getItemType());

        } else if (purchase.getSku().equals(ITEM_500_SKU)) {

            consumeItem();


        } else if (purchase.getSku().equals(ITEM_1000_SKU)) {
            consumeItem();


        }

    }



    public void consumeItem() {
        mHelper.queryInventoryAsync(mReceivedInventoryListener);
        Log.d(TAG,"here 3");
    }

    IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener
            = new IabHelper.QueryInventoryFinishedListener() {
        public void onQueryInventoryFinished(IabResult result,
                                             Inventory inventory) {

            if (result.isFailure()) {
                // Handle failure
            } else {
                mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU),
                        mConsumeFinishedListener);
                Log.d(TAG,"here 4"+inventory.getPurchase(ITEM_SKU).getItemType());
            }
        }
    };

    IabHelper.OnConsumeFinishedListener mConsumeFinishedListener =
            new IabHelper.OnConsumeFinishedListener() {
                public void onConsumeFinished(Purchase purchase,
                                              IabResult result) {

                    if (result.isSuccess()) {
                        //clickButton.setEnabled(true);

                        //  Log.d(TAG,"SUCCESSFUL");
                        purchaseFinished(ITEM_SKU);
                        Log.d(TAG,"here2");

                        SharedPreferences settings = getSharedPreferences("MYSETTINGS", 0);
                        SharedPreferences.Editor editor = settings.edit();
                        editor.putBoolean("isPremium", true);
                        editor.apply();

                        Adad.setDisabled(true);


                    } else {
                        // handle error
                        Log.d(TAG,"here 5");
                        Log.d(TAG,result.getMessage());
                        Log.d(TAG,purchase.toString());
                    }
                }
            };
};

@Override
public void onDestroy() {
    super.onDestroy();
    if (mHelper != null) {
        mHelper.dispose();

        mHelper = null;
    }
}


public void onResume() {
    super.onResume();
    Swarm.setActive(this);
    TextView tvCoins = (TextView) findViewById(R.id.tv_Buy_Coins);
    GameInventory gameInventory = new GameInventory(getApplicationContext());
    tvCoins.setText(String.valueOf(gameInventory.getCoinsCount()));
}

public void onPause() {
    super.onPause();
    Swarm.setInactive(this);
}


private void purchaseFinished(String SKU){
    GameInventory gameInventory = new GameInventory(getApplicationContext());

    if (SKU==ITEM_100_SKU) {

        gameInventory.updateCoinsCount(gameInventory.getCoinsCount() + 100);
    }else if(SKU==ITEM_500_SKU){
        gameInventory.updateCoinsCount(gameInventory.getCoinsCount() + 520);
    }else if (SKU==ITEM_1000_SKU){
        gameInventory.updateCoinsCount(gameInventory.getCoinsCount() + 1100);
    }
    ITEM_SKU = "";
}

}

4

1 回答 1

2

嘿,自从 10 天以来,我也在从事 InApp Purchase 工作,我已经成功地集成到我现有的应用程序中,并准备让它上线。最初,当我开始这样做时,我从这里下载了名为“Trivial Drive”的谷歌 InApp 计费示例。

但这对我没有多大帮助,因为它有很多问题和错误,所以我决定使用新的 v3 api 从头开始​​自己做,你可以在这里找到。本教程有明确的解释,可以帮助你,如果你有时间,请查看这个youtube 视频,其中谷歌员工清楚地解释了如何集成它。

此外,如果您想要快速示例,我有一个示例应用程序,您可以从此处下载。

以下视频还解释了如何集成 InApp Purchase。请通过它。

https://www.youtube.com/watch?v=-h2ESH71hAI

谢谢

于 2014-10-13T12:58:50.270 回答