Xamarin.InAppBilling - OnProductPurchase OnProductPurchasedError事件

时间:2014-01-13 21:53:21

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

我正在使用Android应用程序(使用mono / Xamarin实现),允许非消费类应用内购买(用户只需购买一次功能,然后他们就可以永久访问所有设备) 。我正在尝试使用Xamarin.InAppBilling组件来完成此任务。

根据Xamarin.InAppBilling组件(http://components.xamarin.com/view/xamarin.inappbilling)的文档,这些事件可供我使用:

  

Xamarin.InAppBilling定义了以下可以进行的事件   监控并回复:

     

OnConnected - 在组件附加到Google Play时触发。

     

OnDisconnected - 当组件与Google Play分离时触发。

     

OnInAppBillingError - 在组件内部发生错误时引发。

     

OnProductPurchasedError - 购买产品或订阅时出错。 >

     

OnProductPurchase - 成功购买产品时启动。

     

OnPurchaseConsumedError - 在购买时出错时触发。

     

OnPurchaseConsumed - 成功消费购买时提升。

我看到OnConnected,OnDisconnected和OnInAppBillingError事件被定义为Xamarin.InAppBilling.InAppBillingServiceConnection类的一部分。

在程序集浏览器中,我发现其他事件被定义为Xamarin.InAppBilling.InAppBillingHandler类的一部分,但我不确定访问这些事件的最佳方法,因为它们不能通过IInAppBillingHandler接口获得。通过属性Xamarin.InAppBilling.InAppBillingServiceConnection.BillingHandler访问它们是有意义的,但该属性返回一个实例强制转换为IInAppBillingHandler而不是InAppBillingHandler类。

我的问题:

我是否应该期望此代码能够作为内联评论注意到它?

// When activity starts...
_serviceConnection = new InAppBillingServiceConnection (CurrentContext, publicKey);
_serviceConnection.OnConnected += () =>
{
     var bh = _serviceConnection.BillingHandler as InAppBillingHandler;
     bh.OnProductPurchased += (sku) => {
        // This code should run when call to BuyProduct is successful
        var purchasedProductId = sku;
     };

     bh.OnProductPurchasedError += (int responseCode, string sku) => {
         // This code should run when call to BuyProduct is NOT successful 
         var p = sku;
         Toast.MakeText(this, "KP - purchase error: " + p, ToastLength.Long).Show();
     };

};


// When "Buy" button is clicked.  Expect OnProductPurchasedError or OnProductPurchased to be called as a result of a call to this
_serviceConnection.BillingHandler.BuyProduct(_selectedProduct);

我通过添加上面的代码修改了组件中包含的示例代码进行了测试,并且OnProductPurchasedError事件似乎经常被引发(通常在Google Play UI之前说购买成功)。即使Google Play用户界面显示交易成功,我也没有看到OnProductPurchased事件处理程序被调用。有时,在显示Google Play用户界面之前会调用此事件,以允许用户输入付款方式。

我的期望是,只要成功完成购买,就会调用挂钩到OnProductPurchased的事件处理程序。但是,这似乎没有发生,我找不到这些事件的任何文档(除了我在这里粘贴的内容)。此外,传递给OnProductPurchasedError事件处理程序的响应代码始终为0.

正如我已经完成了发表这个问题的研究,我现在的理论是这些事件没有按照我的预期发挥作用,并且文档不正确。

注意:我使用android.test.purchased作为产品ID。我在重新测试之前正在消费购买,我假设将其重置为非购买状态。

有没有人成功利用这些活动?

1 个答案:

答案 0 :(得分:5)

我知道回答有点迟,但希望它可以帮助其他人!

您似乎可能错过了将活动结果从您的活动传回BillingHandler。

protected override void OnActivityResult (int requestCode, Result resultCode, Intent data)
{
    // Ask the open service connection's billing handler to process this request
    service.BillingHandler.HandleActivityResult (requestCode, resultCode, data);
}

这将导致BillingHandler使用结果并触发相应的事件:)