android – 在应用程序计费IAB设置成功,但quaryInventory报告IAB帮手没有设置

前端之家收集整理的这篇文章主要介绍了android – 在应用程序计费IAB设置成功,但quaryInventory报告IAB帮手没有设置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试在应用程序结算中实现.我已经使用了trivialdrivesample.
public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // load game data
    loadData();


    String base64EncodedPublicKey = "my key";



    // Create the helper,passing it our context and the public key to verify signatures with
    Log.d(TAG,"Creating IAB helper.");
    mHelper = new IabHelper(this,base64EncodedPublicKey);

    // enable debug logging (for a production application,you should set this to false).
    mHelper.enableDebugLogging(true);

    // Start setup. This is asynchronous and the specified listener
    // will be called once setup completes.
    Log.d(TAG,"Starting setup.");
    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
        public void onIabSetupFinished(IabResult result) {
            Log.d(TAG,"Setup finished.");

            if (!result.isSuccess()) {
                // Oh noes,there was a problem.
                complain("Problem setting up in-app billing: " + result);
                return;
            }

            // Hooray,IAB is fully set up. Now,let's get an inventory of stuff we own.
            Log.d(TAG,"Setup successful. Querying inventory.");
          //  mHelper.queryInventoryAsync(mGotInventoryListener);
        }
    });
}
Button purchaseB = (Button)findViewById(R.id.purchase_button);

 if(purchaseB != null)
     purchaseB.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {

         onUpgradeAppButtonClicked(null);

      }
  });

它的工作完美,我可以从我的测试帐户购买.

但问题是我必须评论代码

// mHelper.queryInventoryAsync(mGotInventoryListener);
所以我无法查询库存.在嘟嘟我发现这个变量

// Is setup done?
    boolean mSetupDone = false;

在IabHelper类中为false并引发异常.日志刚刚说安装成功后,它的IAB帮手没有设置.

08-02 16:02:42.453: D/PackList(10346): Creating IAB helper.
08-02 16:02:42.453: D/PackList(10346): Starting setup.
08-02 16:02:42.468: D/IabHelper(10346): Starting in-app billing setup.
08-02 16:02:42.515: D/PackList(10346): Creating IAB helper.
08-02 16:02:42.539: D/IabHelper(10346): Billing service connected.
08-02 16:02:42.546: D/IabHelper(10346): Checking for in-app billing 3 support.
08-02 16:02:42.562: D/IabHelper(10346): In-app billing version 3 supported for com.xx
08-02 16:02:42.570: D/IabHelper(10346): Subscriptions AVAILABLE.
08-02 16:02:42.570: D/PackList(10346): Setup finished.
08-02 16:02:42.570: D/PackList(10346): Setup successful. Querying inventory.
08-02 16:02:42.578: E/IabHelper(10346): In-app billing error: Illegal state for operation (queryInventory): IAB helper is not set up.

解决方法

尝试这个.

配置:

mIabHelper = new IabHelper(this,ProjectKonstants.APP_PUBLIC_KEY_GOOGLE_PLAY);

mIabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener()
{
    public void onIabSetupFinished(IabResult result)
    {
        if (result.isSuccess())
        {
            mIabHelper.queryInventoryAsync(mInitialInventoryListener);
        }
    }
});

mInitialInventoryListener = new IabHelper.QueryInventoryFinishedListener()
{
    public void onQueryInventoryFinished(IabResult result,Inventory inventory)
    {
        if (result.isSuccess())
        {
            mBHasDonated = inventory.hasPurchase(ProjectKonstants.APPLICATION_SKU_FOR_DONATION);
        }
        else
        {
            mBHasDonated = false;
        }
    }
};

mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener()
{
    public void onIabPurchaseFinished(IabResult result,Purchase purchase)
    {
        if (result.isSuccess())
        {
            if (purchase.getSku().equals(ProjectKonstants.APPLICATION_SKU_FOR_DONATION))
            {
                mBHasDonated = true;
                return;
            }
        }
        mBHasDonated = false;
    }
};

点击升级按钮:

AccountManager accountManager = (AccountManager) getSystemService(ACCOUNT_SERVICE);
Account[] accounts = accountManager.getAccounts();
String strIdentifier = "[" + accounts[0].name + "][" + android.os.Build.MODEL + "][" + android.os.Build.VERSION.RELEASE + "]";
try
{
    mIabHelper.launchPurchaseFlow(this,ProjectKonstants.APPLICATION_SKU_FOR_DONATION,10001,mPurchaseFinishedListener,strIdentifier);
}
catch (IllegalStateException e)
{
}

猜你在找的Android相关文章