Как определить, действует ли подписка на дополнения в Магазине Windows на пробный или платный период? - PullRequest
0 голосов
/ 23 февраля 2019

Я работаю над добавлением подписки на дополнение к своему приложению Desktop Bridge, опубликованному в магазине Windows, с использованием Windows.Services.Store API.

Я создал тестовое дополнение для подпискина 3 месяца с испытательным сроком 1 неделя.Я могу получить экземпляр StoreAppLicence с помощью метода StoreContext.GetAppLicenseAsync, вызываемого из моего приложения, а затем из его свойства AddOnLicenses найти экземпляр StoreLicense , чей SkuStoreId соответствует StoreId тестадополнение в начале.Но нет никакой подсказки, находится ли эта подписка в пробном периоде или в платном (полном) периоде, потому что у нее нет свойства IsTrial, такого как StoreAppLicence.

Поэтому я хотел бы узнать, находится ли подписка впробный период или платный период для показа моим пользователям статуса подписки в моем приложении.

Обновление

Мне было недостаточно ясно, но я спрашиваю о случае послетекущий пользователь приобрел подписку на дополнение в качестве бесплатной пробной версии.Я хотел бы знать, как определить, еще не закончился ли пробный период или уже прошел пробный период, и подписка перешла на платный (полный) период.

Возможно, я смогу добиться этого путем сохранения данныхкогда пользователь «приобрел» подписку в локальной сети и сравнил ее с текущей датой, но она кажется не идеальной, поскольку может быть вероятность несоответствия данным, управляемым сервером Магазина Windows.

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Возможно, я нашел решение.

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.Он только предоставляет информацию о последней надстройке, а из ее пояснения должен предоставлять информацию обо всех надстройках.Поэтому, если вы хотите проверить несколько надстроек, этого метода будет недостаточно.

0 голосов
/ 25 февраля 2019

C # пример:

subscriptionStoreProduct = await GetSubscriptionProductAsync();
if (subscriptionStoreProduct == null)
{
    return;
}
// Check if the first SKU is a trial and notify the customer that a trial is available.
// If a trial is available, the Skus array will always have 2 purchasable SKUs and the
// first one is the trial. Otherwise, this array will only have one SKU.
StoreSku sku = subscriptionStoreProduct.Skus[0];
if (sku.SubscriptionInfo.HasTrialPeriod)
{
    // You can display the subscription trial info to the customer here. You can use 
    // sku.SubscriptionInfo.TrialPeriod and sku.SubscriptionInfo.TrialPeriodUnit 
    // to get the trial details.
}
else
{
    // You can display the subscription purchase info to the customer here. You can use 
    // sku.SubscriptionInfo.BillingPeriod and sku.SubscriptionInfo.BillingPeriodUnit
    // to provide the renewal details.
}

Получено из образца Приобретите дополнение подписки и класс StoreSku Class

Обновление

Если пользователи могут использовать подписку, есть только две возможности: одна на пробный период и одна, которую они уже приобрели.Метод ( GetSubscriptionProductAsync ) в коде получает подписки, которые могут использовать пользователи, подробности см. В примере ( Приобретение дополнения cubscription ),Свойство HasTrialPeriod получает значение, указывающее, содержит ли подписка пробный период.

...