微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用户已付费但无法访问付费内容Xamarin Forms InAppBilling

如何解决用户已付费但无法访问付费内容Xamarin Forms InAppBilling

我有一个Xamarin Forms应用程序,其中使用了InAppBilling插件进行应用程序内购买。客户可以使用应用从应用内购买耗材。

  • 应用程序调用CrossInAppBilling.Current.PurchaseAsync()从Apple应用程序内购买中购买商品。
  • 完成购买后,我们会从Apple购买的产品中获取返回的信息,并再次致电数据库,以将购买记录保留在我们的数据库中。函数是AddPayment()。反过来,这将授予用户访问其所支付商品的权限。

一些用户说他们已经付出了代价,但是他们从未获得过访问该内容的权利。这是该插件中的错误,还是我需要做一些事情。以下是我购买商品的功能

public async Task Purchase()
    {
        try
        {
            var productId = GetProductId(courseDetails.price);

            var connected = await CrossInAppBilling.Current.ConnectAsync();
            if (!connected)
            {
                //Couldn't connect to billing,Could be offline,alert user
                Settings.Message = "Could not connect to billing right Now,it Could be offline. Try again later.";
                return;

            }
          
          var purchase = await CrossInAppBilling.Current.PurchaseAsync(productId,ItemType.InAppPurchase,"apppayload");

            // check if Failed
            if (purchase == null)
            {
                // Not purchased,alert the user
                await home.displayAlert("Error","Could not complete your purchase. Please try again.","Ok");
            }
            // SUCCESSFULL,add into the database. 
            else if (purchase.State == PurchaseState.Purchased)
            {
                //Purchased,save this information
                var id = purchase.Id;
                string serializedobject = JsonConvert.SerializeObject(purchase);

                // send an API call to save record to DB
                var result = AddPaymentToDB(id,serializedobject).GetAwaiter().GetResult();
                
                await home.displayAlert("Success","You have successfully purchased this course. Your payment ID is :" + purchase.Id,"Ok");
                IsReady = true;
                await LoadPaidContent(result.data);
            }
            isProcessingPaymentRequest = false;
        }
        catch (InAppBillingPurchaseException ex)
        {
            switch (ex.PurchaseError)
            {
                case PurchaseError.AppStoreUnavailable:
                    await home.displayAlert("Error","Currently the app store seems to be unavailble. Try again later.","Ok");
                    break;
                case PurchaseError.BillingUnavailable:
                    await home.displayAlert("Error","Billing seems to be unavailable,please try again later.","Ok");
                    break;
                case PurchaseError.PaymentInvalid:
                    await home.displayAlert("Error","Payment seems to be invalid,please try again.","Ok");
                    break;
                case PurchaseError.PaymentNotAllowed:
                    await home.displayAlert("Error","Payment does not seem to be enabled/allowed,"Ok");
                    break;

                case PurchaseError.UserCancelled:
                    break;

                default:
                    await home.displayAlert("Error",ex.Message,"Ok");
                    break;
            }
            isProcessingPaymentRequest = false;

        }
        catch (Exception ex)
        {
            isProcessingPaymentRequest = false;
        }
        finally
        {
            //disconnect,it is okay if we never connected
            await CrossInAppBilling.Current.disconnectAsync();
            isProcessingPaymentRequest = false;
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。