Java 应用内计费(购买)将应用与项目链接

Java 应用内计费(购买)将应用与项目链接,java,android,in-app-purchase,google-play,in-app-billing,Java,Android,In App Purchase,Google Play,In App Billing,我正在尝试在我的应用程序中实施应用程序内puchase/计费,因此当用户购买商品时,我会删除广告。我有一个示例代码,该代码使用SKU=“android.test.purchase”。现在我的问题是如何将应用程序链接到我的项目-我已经上传了启用计费的新apk,一小时前创建并发布了项目,但当我尝试购买项目时,我得到了以下信息: 这是我的密码: public class RemoveAds extends AthanBaseActivity implements OnClickListener {

我正在尝试在我的应用程序中实施应用程序内puchase/计费,因此当用户购买商品时,我会删除广告。我有一个示例代码,该代码使用
SKU=“android.test.purchase”
。现在我的问题是如何将应用程序链接到我的项目-我已经上传了启用计费的新apk,一小时前创建并发布了项目,但当我尝试购买项目时,我得到了以下信息:

这是我的密码:

public class RemoveAds extends AthanBaseActivity implements OnClickListener {

    private static final String TAG = "inappbilling";
    IabHelper mHelper;
    //ID from playstore 16xxxx15_removeads.
//android.test.purchased
    static final String ITEM_SKU = "com.myapppackage.16xxxx15_removeads.";

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.remove_ads);

        findViewById( R.id.remove_ads_).setOnClickListener(this);

        setupInAppPurchase();

    }

    public void consumeItem() {
        mHelper.queryInventoryAsync(mReceivedInventoryListener);
    }

    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);
            }
        }
    };

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

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

            if (result.isSuccess()) {
                Toast.makeText(RemoveAds.this, "SUCCESS", Toast.LENGTH_LONG)
                        .show();
            } else {
                Toast.makeText(RemoveAds.this, "ERROR purchase",
                        Toast.LENGTH_LONG).show();
                // handle error
            }
        }
    };

    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_SKU)) {
                consumeItem();
                // buyButton.setEnabled(false);
            }

        }
    };

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

    private void setupInAppPurchase() {
        String base64EncodedPublicKey = "MIIBIjANBgkqhkcccxxxxxdomr somelongstringdfsdfsdfsfsdofksdofkdsMXz0R4EJuw7YZkQ8jMPemymSbQGtLllH+fu85hfQIDAQAB";

        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");
                }
            }
        });

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.remove_ads_:
            mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,
                    mPurchaseFinishedListener, "mypurchasetoken");
            break;
        }

    }

}

如果真实android设备上的主帐户与开发者帐户相同,则无法购买。

上传后可能需要两个小时才能购买