StoreProduct IsInUserCollection всегда ложно - PullRequest
0 голосов
/ 25 июня 2018

У нас есть продукт UWP в Магазине Microsoft.Продукт имеет ряд дополнений для подписки.Пользователи совершают внутриигровые покупки подписных дополнений. РЕДАКТИРОВАТЬ Наш код выложен в Microsoft Docs Включить надстройки подписки для вашего приложения

StorePurchaseResult result = await product.RequestPurchaseAsync();
if (result.Status == StorePurchaseStatus.Succeeded)

Результат возвращает StorePurchaseStatus.Succeeded.Microsoft взяла деньги пользователя за дополнение подписки.Пока все хорошо.

Мы получаем список продуктов, подобный этому

string[] productKinds = { "Durable" };
List<String> filterList = new List<string>(productKinds);

StoreProductQueryResult queryResult = await storeContext.GetAssociatedStoreProductsAsync(filterList);
productList = queryResult.Products.Values.ToList();

Затем перебираем

foreach (StoreProduct storeProduct in products)
{
    if (storeProduct.IsInUserCollection)
...
}

, но storeProduct.IsInUserCollection всегда возвращает false.Microsoft приняла оплату за надстройку, но не добавила ее в набор продуктов пользователя, поэтому мы не можем подтвердить, что они заплатили за надстройку.

Где мы ошиблись?

РЕДАКТИРОВАТЬ 2 Следуя совету @lukeja, я запустил этот метод

async Task CheckSubsAsync()
{
    StoreContext context = context = StoreContext.GetDefault();
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();

    foreach (var addOnLicense in appLicense.AddOnLicenses)
    {
        StoreLicense license = addOnLicense.Value;
        Debug.WriteLine($"license.SkuStoreId {license.SkuStoreId}");
    }
}

Это выводит только одну надстройку.Бесплатное дополнение.У нас есть 16 надстроек, только одна из которых бесплатна.

Почему не возвращается ни одна из наших платных подписок на надстройки?

РЕДАКТИРОВАТЬ 3 appLicense.AddOnLicensesвключает в себя только лицензии на дополнения для текущего пользователя, но не все дополнения для приложения.Пример кода, предоставленный @lukeja, работает, как и ожидалось, при запуске в контексте пользователя, оплатившего подписку.

1 Ответ

0 голосов
/ 25 июня 2018

Я не уверен, почему вы используете этот метод. То, как я в настоящее время делаю это в своем приложении, и то, что в документации Microsoft говорится так:

private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();

    // Check if the customer has the rights to the subscription.
    foreach (var addOnLicense in appLicense.AddOnLicenses)
    {
        StoreLicense license = addOnLicense.Value;

        if (license.IsActive)
        {
            // The expiration date is available in the license.ExpirationDate property.
            return true;
        }
    }

    // The customer does not have a license to the subscription.
    return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...