Как настроить подписки на консоль Google Play в приложении MauiAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как настроить подписки на консоль Google Play в приложении Maui

Сообщение Anonymous »

Я пытаюсь внедрить библиотеку платежей 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»