Я пытаюсь внедрить библиотеку платежей 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
Форум для тех, кто программирует под Android
-
Anonymous
1715532364
Anonymous
Я пытаюсь внедрить библиотеку платежей Google Play в свое приложение на Мауи для Android. Мне нужно настроить подписки и коды предложений в приложении, и согласно этой теме https://learn.microsoft.com/en-us/answers/questions/1347017/im-curious-about-the-google-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);
}
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78468605/how-to-set-up-google-play-console-subscriptions-in-maui-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия