2015-08-22 97 views
0

我已经查看了关于同样问题的其他类似问题,并指出了相同的一点。检查产品的ID。我正在首次实施应用内购买,并且我认为我在代码中使用了正确的产品ID。我正在关注TrivialDrive示例。Google Play应用程序内结算V3 - 错误 - 需要验证

因此,错误如下:

enter image description here

从谷歌我的产品ID玩:

enter image description here

我的代码如下:

package com.xx.xxx; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.xx.xxx.util.IabHelper; 
import com.xx.xxx.util.IabResult; 
import com.xx.xxx.util.Inventory; 
import com.xx.xxx.util.Purchase; 

public class UpgradeDonateActivity extends AppCompatActivity { 

    private String base64EncodedPublicKey = "PUBLIC_KEY_REPLACED"; 
    private static final int PURCHASE_RESPONSE = 1; 
    private static final String PURCHASE_TOKEN = "purchase_token"; 


    private static final String SKU_UPGRADE_2 = "test"; 
    //private static final String SKU_UPGRADE = "Upgrade"; 
    private static final String SKU_DONATE_10 = "donate_10"; 
    private static final String SKU_DONATE_5 = "donate_5"; 
    private static final String SKU_DONATE_3 = "donate_3"; 
    private static final String SKU_DONATE_2 = "donate_2"; 

    private boolean mIsUpgraded = false; 

    private Toolbar toolbar; 
    private TextView title; 

    private IabHelper mIabHelper; 
    private Button btnUpgrade; 


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

      Log.d(Const.DEBUG, "Query inventory finished"); 

      if (mIabHelper == null) return; 

      if (result.isFailure()) { 
       // Handle failure 
       Toast.makeText(UpgradeDonateActivity.this, "onQueryInventoryFinished Failed", Toast.LENGTH_LONG).show(); 
       return; 
      } 

      Log.d(Const.DEBUG, "Query inventory successful"); 

      Purchase upgradePurchase = inventory.getPurchase(SKU_UPGRADE_2); 
      mIsUpgraded = (upgradePurchase != null && verifyDeveloperPayload(upgradePurchase)); 
      Log.d(Const.DEBUG, "User is " + (mIsUpgraded ? "Upgraded" : "Not Upgraded")); 
     } 
    }; 


    boolean verifyDeveloperPayload(Purchase p) { 
     String payload = p.getDeveloperPayload(); 
     return true; 
    } 


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


      Log.d(Const.DEBUG, "Purchase finished: " + result + ", purchase: " + purchase); 

      if(mIabHelper == null) return; 

      if (result.isFailure()) { 
       // Handle error 
       Log.d(Const.DEBUG, "Error Purchasing: "+result); 
       return; 
      } 

      if(!verifyDeveloperPayload(purchase)) { 
       Log.d(Const.DEBUG, "Error purchasing. Authenticity verification failed."); 
       return; 
      } 

      Log.d(Const.DEBUG, "Purchase successful."); 

      if(purchase.getSku().equals(SKU_UPGRADE_2)) { 
       Log.d(Const.DEBUG, "Purchase is upgrade. Congratulating user."); 
       mIsUpgraded = true; 
      } 

     } 
    }; 


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

        if (result.isSuccess()) { 
         //clickButton.setEnabled(true); 
         Toast.makeText(UpgradeDonateActivity.this, "", Toast.LENGTH_LONG).show(); 
        } else { 
         // handle error 
         Toast.makeText(UpgradeDonateActivity.this, "Error", Toast.LENGTH_LONG).show(); 
        } 
       } 
      }; 


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

     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     title = (TextView) toolbar.findViewById(R.id.toolbar_title); 
     title.setText(""); 

     setSupportActionBar(toolbar); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 


     btnUpgrade = (Button) findViewById(R.id.button_upgrade); 
     btnUpgrade.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       mIabHelper = new IabHelper(UpgradeDonateActivity.this, base64EncodedPublicKey); 
       mIabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
        @Override 
        public void onIabSetupFinished(IabResult result) { 
         if (!result.isSuccess()) { 
          Log.d(Const.DEBUG, "In-app Billing setup Failed"); 
         } else { 
          Log.d(Const.DEBUG, "In-app Billing setup OK"); 
          Toast.makeText(UpgradeDonateActivity.this, "In-app Billing setup OK", Toast.LENGTH_SHORT).show(); 

          mIabHelper.launchPurchaseFlow(UpgradeDonateActivity.this, SKU_UPGRADE_2, PURCHASE_RESPONSE, mPurchaseFinishedListener, PURCHASE_TOKEN); 
         } 
        } 
       }); 
      } 
     }); 
    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     Log.d(Const.DEBUG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); 
     if (mIabHelper == null) return; 

     // Pass on the activity result to the helper for handling 
     if (!mIabHelper.handleActivityResult(requestCode, resultCode, data)) { 
      // not handled, so handle it ourselves (here's where you'd 
      // perform any handling of activity results not related to in-app 
      // billing... 
      super.onActivityResult(requestCode, resultCode, data); 
     } else { 
      Log.d(Const.DEBUG, "onActivityResult handled by IABUtil."); 
     } 
    } 


    public void consumeItem() { 
     mIabHelper.queryInventoryAsync(mGotInventoryListener); 
    } 


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

谁能告诉我,我是什么在这种情况下做错了吗?我应该如何解决它?

+0

你使用你的谷歌帐户登录设备 – meghraj27

+0

是的..我检查并重新检查它。我登录了,我在playstore中提到了测试人员帐户。 –

+0

我希望测试人员帐户与用于开发人员控制台的帐户不同。 – meghraj27

回答

1

请确保您有到位计费(右权限)apk文件是发布(无论是字母),并允许一段时间谷歌播放吸收新的apk文件,可能是几个小时。

此外,请确保您当前开发版本中的应用程序版本代码与已发布的启用结算启用版本中的应用程序版本代码相同。

+0

我有点困惑在这里..我怎么能发布apk测试Alpha。我的意思是,我在Alpha测试部分上传了签名的版本,现在它说,“Alpha版本的草案”。我可以选择“升级到Beta”和“促进产品”。我应该说“促进生产”并保存它吗? –

+0

您必须发布该应用程序,只要它在“草稿”中,Play服务甚至不会考虑它。在开发控制台中查找“发布”按钮,不用担心,构建不会从阿尔法到神奇地被提升,发布之后,除alpha中的人员将无法看到它。 –

+0

Okie ..感谢您的帮助!会回到你身边。 –