问题描述
我有一个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 (将#修改为@)