#c# #xamarin #xamarin.forms #in-app-purchase #in-app-billing
#c# #xamarin #xamarin.forms #покупка в приложении #in-app-выставление счетов
Вопрос:
Я использую jamesmontenegro InAppBilling, и у меня небольшая проблема с платежами.
Код работает нормально, но после обработки платежа в Google Play Store приложение не обрабатывает процедуру и не возвращается, если покупка была успешной, что привело к невозможности использования приобретенного товара.
Вот простой код
public static async Task<bool> PurchaseItem(string productId, string payload)
{
var billing = CrossInAppBilling.Current;
try
{
var connected = await billing.ConnectAsync(ItemType.InAppPurchase);
if (!connected)
{
//we are offline or can't connect, don't try to purchase
return false;
}
//check purchases
var purchase = await billing.PurchaseAsync(productId, ItemType.InAppPurchase, payload);
//possibility that a null came through.
if (purchase == null)
{
//did not purchase
Debug.WriteLine("purchased but not consumed");
return true;
}
else if (purchase.State == PurchaseState.Purchased)
{
//purchased, we can now consume the item or do it later
//If we are on iOS we are done, else try to consume the purchase
//Device.RuntimePlatform comes from Xamarin.Forms, you can also use a conditional flag or the DeviceInfo plugin
if (Device.RuntimePlatform == Device.iOS)
return true;
var consumedItem = await CrossInAppBilling.Current.ConsumePurchaseAsync(purchase.ProductId, purchase.PurchaseToken);
if (consumedItem != null)
{
//Consumed!!
Debug.WriteLine("purchased and consumed");
return true;
}
}
return false;
}
На самом деле ничего не выполняется после PurchaseAsync
вызова, поскольку поток переходит в Google Play Store.
Как только платеж завершен и поток возвращается в приложение, обработать что-либо невозможно.
Есть идеи? Для этого есть обходной путь, но мне просто интересно, не делаю ли я здесь что-то не так?
Комментарии:
1. Как это
PurchaseItem
называется? В частности, выполняет ли какой-либо код синхронизацию поверх асинхронности в любой момент?2. @StephenCleary это просто асинхронный вызов, такой как вызов var = async…
3. Код в разделе PurchaseAsync никогда не выполняется на платформе Android?