Возможно, я нашел решение.
IsTrial
свойство StoreCollectionData , полученное методом StoreContext.GetUserCollectionAsync
, предоставляет информацию, которая мне нужна.Кроме того, StoreCollectionData также включает в себя свойство AcquiredDate
, которое указывает дату покупки дополнения подписки и полезно для расчета даты окончания срока действия самостоятельно.По моему опыту, свойство ExpirationDate
StoreLicense, полученное методом StoreContext.GetAppLicenseAsync
, кажется не точным (на 3 дня позже фактической даты истечения срока действия).
Пример кода будет следующим.
public enum LicenseStatus
{
Unknown = 0,
Trial,
Full
}
private static StoreContext _context;
public static async Task<(string storeId, LicenseStatus status, DateTimeOffset acquiredDate)[]> GetSubscriptionAddonStatusesAsync()
{
if (_context is null)
_context = StoreContext.GetDefault();
StoreProductQueryResult queryResult = await _context.GetUserCollectionAsync(new[] { "Durable" });
if (queryResult.ExtendedError != null)
throw queryResult.ExtendedError;
IEnumerable<(string, LicenseStatus, DateTimeOffset)> Enumerate()
{
foreach (KeyValuePair<string, StoreProduct> pair in queryResult.Products)
{
StoreSku sku = pair.Value.Skus.FirstOrDefault();
StoreCollectionData data = sku?.CollectionData;
if (data != null)
{
LicenseStatus status = data.IsTrial ? LicenseStatus.Trial : LicenseStatus.Full;
yield return (pair.Key, status, data.AcquiredDate);
}
}
}
return Enumerate().ToArray();
}
С другой стороны, все еще существует странная вещь в методе StoreContext.GetUserCollectionAsync
.Он только предоставляет информацию о последней надстройке, а из ее пояснения должен предоставлять информацию обо всех надстройках.Поэтому, если вы хотите проверить несколько надстроек, этого метода будет недостаточно.