queryinventoryasync返回0个产品

时间:2016-06-15 09:26:33

标签: android xamarin in-app-purchase in-app-billing

我从Android的xamarin应用内结算组件调用queryinventoryasync,但即使我在Google Play中添加了4个应用内商品,我也总是收到0个产品。我已经做了以下尝试让它工作:

  • 将应用内商品添加到Google Play并设置为有效
  • 将我的APK上传到Alpha测试
  • 在Google Play上创建了一个测试帐户,并在测试应用内购买时在我的设备上使用该帐户登录
  • 将Xamarin InAppBilling组件添加到我的项目
  • 设置结算的应用程序权限:android:name =" com.android.vending.BILLING"
  • 连接到应用内结算功能正常。
  • 我正在使用物理设备进行测试。
  • 我甚至在测试预订ID并且他们不能工作。

这是我的代码:

    static internal InAppBillingServiceConnection _serviceConnection;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        _serviceConnection = new InAppBillingServiceConnection(this, APP_KEY);
        _serviceConnection.OnInAppBillingError += ServiceConnection_OnInAppBillingError;

        _serviceConnection.OnConnected += () =>
        {
            GetInventory();
        };

        _serviceConnection.Connect();

        global::Xamarin.Forms.Forms.Init(this, bundle);
        Core.App.ALLOW_ADULT_SWITCH = false;
        LoadApplication(new Core.App());
    }

    //For testing purposes only.
    private async void GetInventory()
    {
        var products = await _serviceConnection.BillingHandler.QueryInventoryAsync(new List<string>
            {
                ReservedTestProductIDs.Purchased
            },
            ItemType.Product);

        if (products == null)
        {
            return;
        }
    }

    private void ServiceConnection_OnInAppBillingError(InAppBillingErrorType error, string message)
    {
        throw new System.Exception(message);
    }

    protected override void OnDestroy()
    {
        if (_serviceConnection != null && _serviceConnection.Connected)
            _serviceConnection.Disconnect();
        _serviceConnection = null;

        base.OnDestroy();
    }

3 个答案:

答案 0 :(得分:0)

上帝,这是一个工作的噩梦!这就是我做的,

1)跳过queryinventoryasync调用并专注于方法     BuyProduct(situation.PurchaseId,ItemType.Product,user.EmailAddress); 此重载允许您通过直接传入产品ID来跳过queryinventoryasync。

2)有了这个,我开始使用了机器人保留的测试ID,并且它起作用了。但实际产品ID并没有起作用。

3)我上传了一个新的apk并点击了发布,而在alpha测试中,发布按钮被放置在一个不直观的地方。但显然如果在alpha测试中按下发布,它只会发布给你的测试人员。

4)在浏览器上以测试人员身份登录,然后点击google开发者控制台中的选择加入链接,注册为google play的测试人员。

5)app的调试版本不适用于应用内商品,您必须从设备手动从googleplay下载应用版本并安装,然后运行,最后您可以测试应用内商品! !!

答案 1 :(得分:0)

在您的APK以alpha模式批准后几个小时,它也可以在您自己的产品的调试模式下工作。

答案 2 :(得分:0)

确保:

  1. 创建id时的公钥是否正确
  2. 确保您的软件包名称与Google Play控制台中的应用程序包完全一致。在我的情况下,我有这个问题,因为在我的调试版本中,我使用IabHelper为我的包名称添加前缀,导致Google Play将其识别为不同的包,即使公钥是我的生产应用程序的公钥。第