Skip to content

Commit

Permalink
start implementing v5
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesmontemagno committed May 4, 2023
1 parent 1bc1b04 commit 979564e
Show file tree
Hide file tree
Showing 7 changed files with 112 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,6 @@
<Project>{6D4D9135-F225-4626-A9CE-32BDF97AEA89}</Project>
<Name>InAppBillingTests</Name>
</ProjectReference>
<ProjectReference Include="..\..\Plugin.InAppBilling\Plugin.InAppBilling.csproj">
<Project>{C570E25E-259F-4D4C-88F0-B2982815192D}</Project>
<Name>Plugin.InAppBilling</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Mac\Xamarin.Mac.CSharp.targets" />
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,5 @@
<Project>{6D4D9135-F225-4626-A9CE-32BDF97AEA89}</Project>
<Name>InAppBillingTests</Name>
</ProjectReference>
<ProjectReference Include="..\..\Plugin.InAppBilling\Plugin.InAppBilling.csproj">
<Project>{C570E25E-259F-4D4C-88F0-B2982815192D}</Project>
<Name>Plugin.InAppBilling</Name>
</ProjectReference>
</ItemGroup>
</Project>
40 changes: 26 additions & 14 deletions src/Plugin.InAppBilling/Converters.android.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,27 +54,39 @@ internal static InAppBillingPurchase ToIABPurchase(this PurchaseHistoryRecord pu
};
}

internal static InAppBillingProduct ToIAPProduct(this SkuDetails product)
internal static InAppBillingProduct ToIAPProduct(this ProductDetails product)
{
var oneTime = product.GetOneTimePurchaseOfferDetails();
var subs = product.GetSubscriptionOfferDetails()?.Select(s => new SubscriptionOfferDetail
{
BasePlanId = s.BasePlanId,
OfferId = s.OfferId,
OfferTags = s.OfferTags?.ToList(),
OfferToken = s.OfferToken,
PricingPhases = s?.PricingPhases?.PricingPhaseList?.Select(p =>
new PricingPhase
{
BillingCycleCount = p.BillingCycleCount,
BillingPeriod = p.BillingPeriod,
FormattedPrice = p.FormattedPrice,
PriceAmountMicros = p.PriceAmountMicros,
PriceCurrencyCode = p.PriceCurrencyCode,
RecurrenceMode = p.RecurrenceMode
}).ToList()
});

return new InAppBillingProduct
{
Name = product.Title,
Description = product.Description,
CurrencyCode = product.PriceCurrencyCode,
LocalizedPrice = product.Price,
ProductId = product.Sku,
MicrosPrice = product.PriceAmountMicros,
CurrencyCode = oneTime?.PriceCurrencyCode,
LocalizedPrice = oneTime?.FormattedPrice,
ProductId = product.ProductId,
MicrosPrice = oneTime?.PriceAmountMicros ?? 0,

AndroidExtras = new InAppBillingProductAndroidExtras
{
SubscriptionPeriod = product.SubscriptionPeriod,
LocalizedIntroductoryPrice = product.IntroductoryPrice,
MicrosIntroductoryPrice = product.IntroductoryPriceAmountMicros,
FreeTrialPeriod = product.FreeTrialPeriod,
IconUrl = product.IconUrl,
IntroductoryPriceCycles = product.IntroductoryPriceCycles,
IntroductoryPricePeriod = product.IntroductoryPricePeriod,
MicrosOriginalPriceAmount = product.OriginalPriceAmountMicros,
OriginalPrice = product.OriginalPrice

}
};
}
Expand Down
15 changes: 9 additions & 6 deletions src/Plugin.InAppBilling/InAppBilling.android.cs
Original file line number Diff line number Diff line change
Expand Up @@ -157,16 +157,19 @@ public async override Task<IEnumerable<InAppBillingProduct>> GetProductInfoAsync
ParseBillingResult(result);
}

var skuDetailsParams = SkuDetailsParams.NewBuilder()
.SetType(skuType)
.SetSkusList(productIds)
.Build();

var skuDetailsResult = await BillingClient.QuerySkuDetailsAsync(skuDetailsParams);
var productList = productIds.Select(p => QueryProductDetailsParams.Product.NewBuilder()
.SetProductType(skuType)
.SetProductId(p)
.Build()).ToList();

var skuDetailsParams = QueryProductDetailsParams.NewBuilder().SetProductList(productList);

var skuDetailsResult = await BillingClient.QueryProductDetailsAsync(skuDetailsParams.Build());
ParseBillingResult(skuDetailsResult?.Result);


return skuDetailsResult.SkuDetails.Select(product => product.ToIAPProduct());
return skuDetailsResult.ProductDetails.Select(product => product.ToIAPProduct());
}


Expand Down
11 changes: 6 additions & 5 deletions src/Plugin.InAppBilling/Plugin.InAppBilling.csproj
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
<Project Sdk="MSBuild.Sdk.Extras/3.0.44">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;MonoAndroid10.0;Xamarin.iOS10;Xamarin.TVOS10;Xamarin.Mac20;net6.0-android;net6.0-ios;net6.0-maccatalyst;net6.0-tvos;net6.0-macos</TargetFrameworks>
<!--<TargetFrameworks>netstandard2.0;net7.0-android</TargetFrameworks>-->
<TargetFrameworks>netstandard2.0;MonoAndroid12.0;Xamarin.iOS10;Xamarin.TVOS10;Xamarin.Mac20;net6.0-android;net6.0-ios;net6.0-maccatalyst;net6.0-tvos;net6.0-macos</TargetFrameworks>
<TargetFrameworks Condition=" '$(OS)' == 'Windows_NT' ">$(TargetFrameworks);uap10.0.19041;net6.0-windows10.0.19041;</TargetFrameworks>
<LangVersion>9.0</LangVersion>
<AssemblyName>Plugin.InAppBilling</AssemblyName>
Expand Down Expand Up @@ -97,14 +98,14 @@

<ItemGroup Condition=" $(TargetFramework.Contains('-android')) ">
<Compile Include="**\*.android.cs" />
<PackageReference Include="Xamarin.Android.Google.BillingClient" Version="4.0.0" />
<PackageReference Include="Xamarin.Google.Guava.ListenableFuture" Version="1.0.0.6" />
<PackageReference Include="Xamarin.Android.Google.BillingClient" Version="5.1.0.1" />
<PackageReference Include="Xamarin.Google.Guava.ListenableFuture" Version="1.0.0.12" />
</ItemGroup>

<ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
<Compile Include="**\*.android.cs" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.2" />
<PackageReference Include="Xamarin.Android.Google.BillingClient" Version="4.0.0" />
<PackageReference Include="Xamarin.Essentials" Version="1.7.5" />
<PackageReference Include="Xamarin.Android.Google.BillingClient" Version="5.1.0.1" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
</ItemGroup>

Expand Down
97 changes: 51 additions & 46 deletions src/Plugin.InAppBilling/Shared/InAppBillingProduct.shared.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ public class InAppBillingProductAppleExtras
public bool IsFamilyShareable { get; set; }

/// <summary>
/// iOS 11.2: gets information about product discunt
/// iOS 11.2: gets information about product discount
/// </summary>
public InAppBillingProductDiscount IntroductoryOffer { get; set; } = null;


/// <summary>
/// iOS 12.2: gets information about product discunt
/// iOS 12.2: gets information about product discount
/// </summary>
public List<InAppBillingProductDiscount> Discounts { get; set; } = null;
}
Expand Down Expand Up @@ -87,51 +87,56 @@ public class InAppBillingProductWindowsExtras
public class InAppBillingProductAndroidExtras
{
/// <summary>
/// Subscription period, specified in ISO 8601 format.
/// </summary>
public string SubscriptionPeriod { get; set; }

/// <summary>
/// Trial period, specified in ISO 8601 format.
/// </summary>
public string FreeTrialPeriod { get; set; }

/// <summary>
/// Icon of the product if present
/// </summary>
public string IconUrl { get; set; }

/// <summary>
/// Gets or sets the localized introductory price.
/// </summary>
/// <value>The localized introductory price.</value>
public string LocalizedIntroductoryPrice { get; set; }

/// <summary>
/// Number of subscription billing periods for which the user will be given the introductory price, such as 3
/// </summary>
public int IntroductoryPriceCycles { get; set; }

/// <summary>
/// Billing period of the introductory price, specified in ISO 8601 format
/// </summary>
public string IntroductoryPricePeriod { get; set; }

/// <summary>
/// Introductory price of the product in micro-units
/// </summary>
/// <value>The introductory price.</value>
public Int64 MicrosIntroductoryPrice { get; set; }

/// <summary>
/// Formatted original price of the item, including its currency sign.
/// </summary>
public string OriginalPrice { get; set; }

/// <summary>
/// Original price in micro-units, where 1,000,000, micro-units equal one unit of the currency
/// The period details for products that are subscriptions.
/// </summary>
public long MicrosOriginalPriceAmount { get; set; }
public List<SubscriptionOfferDetails> SubscriptionOfferDetails { get; set; }

///// <summary>
///// Subscription period, specified in ISO 8601 format.
///// </summary>
//public string SubscriptionPeriod { get; set; }

///// <summary>
///// Trial period, specified in ISO 8601 format.
///// </summary>
//public string FreeTrialPeriod { get; set; }

///// <summary>
///// Icon of the product if present
///// </summary>
//public string IconUrl { get; set; }

///// <summary>
///// Gets or sets the localized introductory price.
///// </summary>
///// <value>The localized introductory price.</value>
//public string LocalizedIntroductoryPrice { get; set; }

///// <summary>
///// Number of subscription billing periods for which the user will be given the introductory price, such as 3
///// </summary>
//public int IntroductoryPriceCycles { get; set; }

///// <summary>
///// Billing period of the introductory price, specified in ISO 8601 format
///// </summary>
//public string IntroductoryPricePeriod { get; set; }

///// <summary>
///// Introductory price of the product in micro-units
///// </summary>
///// <value>The introductory price.</value>
//public Int64 MicrosIntroductoryPrice { get; set; }

///// <summary>
///// Formatted original price of the item, including its currency sign.
///// </summary>
//public string OriginalPrice { get; set; }

///// <summary>
///// Original price in micro-units, where 1,000,000, micro-units equal one unit of the currency
///// </summary>
//public long MicrosOriginalPriceAmount { get; set; }
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;

namespace Plugin.InAppBilling
{
Expand Down Expand Up @@ -128,4 +129,23 @@ public enum ProductDiscountType
/// </summary>
Unknown
}

public class SubscriptionOfferDetail
{
public string BasePlanId { get; set; }
public string OfferId { get; set; }
public List<string> OfferTags { get; set; }
public string OfferToken { get; set; }
public List<PricingPhase> PricingPhases { get; set; }
}

public class PricingPhase
{
public int BillingCycleCount { get; set; }
public string BillingPeriod { get; set; }
public string FormattedPrice { get; set; }
public long PriceAmountMicros { get; set; }
public string PriceCurrencyCode { get; set; }
public int RecurrenceMode { get; set; }
}
}

0 comments on commit 979564e

Please sign in to comment.