Fix unavailable Play subscription handling
This commit is contained in:
1 parent
6a675ce635
commit
01da7efc2f
4 files changed
+26
-7
No files matched your search
@@ -28,8 +28,8 @@
|
|||||||
<ApplicationId>it.liviomerola.lmemappecatastali.pro</ApplicationId>
|
<ApplicationId>it.liviomerola.lmemappecatastali.pro</ApplicationId>
|
||||||
|
|
||||||
<!-- Versions -->
|
<!-- Versions -->
|
||||||
<ApplicationDisplayVersion>1.0.4</ApplicationDisplayVersion>
|
<ApplicationDisplayVersion>1.0.5</ApplicationDisplayVersion>
|
||||||
<ApplicationVersion>104</ApplicationVersion>
|
<ApplicationVersion>105</ApplicationVersion>
|
||||||
<Version>$(ApplicationDisplayVersion)</Version>
|
<Version>$(ApplicationDisplayVersion)</Version>
|
||||||
|
|
||||||
<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
|
<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
- Nome: LME Mappe Catastali Pro.
|
- Nome: LME Mappe Catastali Pro.
|
||||||
- Package name Android: `it.liviomerola.lmemappecatastali.pro`.
|
- Package name Android: `it.liviomerola.lmemappecatastali.pro`.
|
||||||
- Versione corrente Play: `1.0.4` / version code `104`.
|
- Versione corrente da pubblicare: `1.0.5` / version code `105`.
|
||||||
- Formato Release Android: Android App Bundle (`.aab`).
|
- Formato Release Android: Android App Bundle (`.aab`).
|
||||||
- Target SDK Release: Android 16 / API 36.
|
- Target SDK Release: Android 16 / API 36.
|
||||||
|
|
||||||
|
|||||||
@@ -92,12 +92,20 @@ public sealed class AndroidPlayBillingService : Java.Lang.Object, IPlayBillingSe
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(basePlanId))
|
||||||
|
{
|
||||||
|
return PlayBillingResult.Failed("Piano LME Pro non valido.");
|
||||||
|
}
|
||||||
|
|
||||||
var details = await GetProductDetailsAsync(cancellationToken);
|
var details = await GetProductDetailsAsync(cancellationToken);
|
||||||
var offer = details?.GetSubscriptionOfferDetails()?
|
var offer = details?.GetSubscriptionOfferDetails()?
|
||||||
.FirstOrDefault(item => item.BasePlanId == basePlanId && string.IsNullOrEmpty(item.OfferId));
|
.FirstOrDefault(item => item.BasePlanId == basePlanId
|
||||||
|
&& string.IsNullOrEmpty(item.OfferId)
|
||||||
|
&& !string.IsNullOrWhiteSpace(item.OfferToken));
|
||||||
if (details is null || offer is null)
|
if (details is null || offer is null)
|
||||||
{
|
{
|
||||||
return PlayBillingResult.Failed("Piano LME Pro non disponibile. Verifica prodotto e base plan nella Play Console.");
|
return PlayBillingResult.Failed(
|
||||||
|
$"Piano {basePlanId} non disponibile su Google Play. Verifica che l'abbonamento lme_pro e il piano siano attivi per il tuo Paese.");
|
||||||
}
|
}
|
||||||
|
|
||||||
var productParams = BillingFlowParams.ProductDetailsParams.NewBuilder()
|
var productParams = BillingFlowParams.ProductDetailsParams.NewBuilder()
|
||||||
@@ -113,7 +121,8 @@ public sealed class AndroidPlayBillingService : Java.Lang.Object, IPlayBillingSe
|
|||||||
var completion = new TaskCompletionSource<PlayBillingResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
var completion = new TaskCompletionSource<PlayBillingResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||||
_purchaseCompletion = completion;
|
_purchaseCompletion = completion;
|
||||||
using var registration = cancellationToken.Register(() => completion.TrySetCanceled(cancellationToken));
|
using var registration = cancellationToken.Register(() => completion.TrySetCanceled(cancellationToken));
|
||||||
var launchResult = _client.LaunchBillingFlow(activity, flow);
|
var launchResult = await MainThread.InvokeOnMainThreadAsync(() =>
|
||||||
|
_client.LaunchBillingFlow(activity, flow));
|
||||||
if (launchResult.ResponseCode != BillingResponseCode.Ok)
|
if (launchResult.ResponseCode != BillingResponseCode.Ok)
|
||||||
{
|
{
|
||||||
_purchaseCompletion = null;
|
_purchaseCompletion = null;
|
||||||
@@ -182,7 +191,7 @@ public sealed class AndroidPlayBillingService : Java.Lang.Object, IPlayBillingSe
|
|||||||
throw new InvalidOperationException(ToMessage(result.Result));
|
throw new InvalidOperationException(ToMessage(result.Result));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result.ProductDetailsList.FirstOrDefault();
|
return result.ProductDetailsList?.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task EnsureConnectedAsync(CancellationToken cancellationToken)
|
private async Task EnsureConnectedAsync(CancellationToken cancellationToken)
|
||||||
|
|||||||
@@ -4,6 +4,16 @@ App .NET MAUI Blazor Hybrid per Android, iOS, Mac Catalyst e Windows, pensata pe
|
|||||||
|
|
||||||
Informativa privacy: [PRIVACY_POLICY.md](PRIVACY_POLICY.md).
|
Informativa privacy: [PRIVACY_POLICY.md](PRIVACY_POLICY.md).
|
||||||
|
|
||||||
|
## Versione Pro 1.0.5 test
|
||||||
|
|
||||||
|
- Il flusso di acquisto Google Play gestisce correttamente prodotti o offerte non restituiti dal catalogo, senza mostrare eccezioni tecniche.
|
||||||
|
- L'apertura della schermata di acquisto viene eseguita sul thread principale Android.
|
||||||
|
|
||||||
|
## Versione Pro 1.0.4 test
|
||||||
|
|
||||||
|
- I prezzi mensile e annuale vengono letti direttamente dal catalogo Google Play.
|
||||||
|
- Il piano Base consente fino a 15 oggetti disegnati; LME Pro non applica limiti.
|
||||||
|
|
||||||
## Versione Pro 1.0.3 test
|
## Versione Pro 1.0.3 test
|
||||||
|
|
||||||
- I pannelli mobili rispettano la barra di navigazione Android e mantengono il pulsante Help completamente raggiungibile tramite scorrimento.
|
- I pannelli mobili rispettano la barra di navigazione Android e mantengono il pulsante Help completamente raggiungibile tramite scorrimento.
|
||||||
|
|||||||
Reference in new issue
Block a user