Я пытаюсь внедрить библиотеку платежей Google Play в свое приложение на Мауи для Android. Мне нужно настроить подписки и коды предложений в приложении, и согласно этой теме https://learn.microsoft.com/en-us/answe ... ogle-play- store-pay-fea Я смогу разблокировать подписки в игровой консоли, когда загружаю пакет AAB с инициализированным платежным клиентом. Однако когда я загружаю, мне просто говорят загрузить APK, когда я захожу в раздел подписок, чтобы попытаться их настроить. Вот класс менеджера подписок, который я пытался использовать внутри каталога Android. Что я делаю не так?
using System.Collections.Generic;
using System.Linq;
using Android.App;
using Android.Content;
using Android.BillingClient.Api;
public class SubscriptionManager
{
private BillingClient billingClient;
private Context context;
private Action subscriptionCallback;
public SubscriptionManager(Context context)
{
this.context = context;
InitializeBillingClient();
}
private void InitializeBillingClient()
{
billingClient = BillingClient.NewBuilder(context)
.EnablePendingPurchases()
.SetListener(new PurchasesUpdateListener(this))
.Build();
billingClient.StartConnection(new SubscriptionConnectionListener(this));
}
private class SubscriptionConnectionListener : Java.Lang.Object, IBillingClientStateListener
{
private readonly SubscriptionManager subscriptionManager;
public SubscriptionConnectionListener(SubscriptionManager subscriptionManager)
{
this.subscriptionManager = subscriptionManager;
}
public void OnBillingServiceDisconnected()
{
// Try to restart the connection on the next request to BillingClient
subscriptionManager.InitializeBillingClient();
}
public void OnBillingSetupFinished(BillingResult billingResult)
{
if (billingResult.ResponseCode == BillingResponseCode.Ok)
{
// BillingClient is ready
}
else
{
// Handle setup failure
// Example: Log error or show a message to the user
}
}
}
public void InitiateSubscriptionPurchase(string skuId, Action callback)
{
subscriptionCallback = callback;
SkuDetailsParams.Builder paramsBuilder = SkuDetailsParams.NewBuilder();
paramsBuilder.SetType(BillingClient.SkuType.Subs);
List skuList = new List { skuId };
paramsBuilder.SetSkusList(skuList);
SkuDetailsParams skuDetailsParams = paramsBuilder.Build();
billingClient.QuerySkuDetailsAsync(skuDetailsParams);
}
private void LaunchSubscriptionBillingFlow(SkuDetails skuDetails)
{
BillingFlowParams billingFlowParams = BillingFlowParams.NewBuilder()
.SetSkuDetails(skuDetails)
.Build();
BillingResult result = billingClient.LaunchBillingFlow((Activity)context, billingFlowParams);
if (result.ResponseCode != BillingResponseCode.Ok)
{
subscriptionCallback?.Invoke(false);
}
}
private class SkuDetailsResponseListener : Java.Lang.Object, ISkuDetailsResponseListener
{
private readonly SubscriptionManager subscriptionManager;
public SkuDetailsResponseListener(SubscriptionManager subscriptionManager)
{
this.subscriptionManager = subscriptionManager;
}
public void OnSkuDetailsResponse(BillingResult billingResult, IList skuDetailsList)
{
if (billingResult.ResponseCode == BillingResponseCode.Ok && skuDetailsList != null && skuDetailsList.Count > 0)
{
SkuDetails skuDetails = skuDetailsList.FirstOrDefault();
subscriptionManager.LaunchSubscriptionBillingFlow(skuDetails);
}
else
{
subscriptionManager.subscriptionCallback?.Invoke(false);
}
}
}
internal class PurchasesUpdateListener : Java.Lang.Object, IPurchasesUpdatedListener
{
private readonly SubscriptionManager subscriptionManager;
public PurchasesUpdateListener(SubscriptionManager subscriptionManager)
{
this.subscriptionManager = subscriptionManager;
}
public void OnPurchasesUpdated(BillingResult billingResult, IList purchases)
{
if (billingResult.ResponseCode == BillingResponseCode.Ok && purchases != null)
{
foreach (var purchase in purchases)
{
// Handle each purchase
if (purchase.PurchaseState == PurchaseState.Purchased)
{
// Purchase was successful
subscriptionManager.subscriptionCallback?.Invoke(true);
}
else if (purchase.PurchaseState == PurchaseState.Pending)
{
// Purchase is pending, handle accordingly
// Example: Show a message to the user
}
else
{
// Purchase failed or was canceled
subscriptionManager.subscriptionCallback?.Invoke(false);
}
}
}
else
{
// Handle purchase update failure
subscriptionManager.subscriptionCallback?.Invoke(false);
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... n-maui-app
Как настроить подписки на консоль Google Play в приложении Maui ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
WCS Как получить объект подписки Woocommerce с учетом идентификатора подписки
Anonymous » » в форуме Php - 0 Ответы
- 54 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Подписки WooCommerce - автоматически выполнять заказы на продление и статус подписки
Anonymous » » в форуме Php - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-