UWP addOnLicense.isActive всегда true

#c# #uwp #licensing

#c# #uwp #лицензирование

Вопрос:

Я пробовал различные методы, но не могу понять, почему этот код всегда приводит к действительному (активному?) лицензия, даже если пользователь не купил дополнение к приложению.

Функция инициализируется при запуске приложения.

 public async void GetLicenseInfo()
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    workingProgressRing.IsActive = true;
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();
    workingProgressRing.IsActive = false;

    if (appLicense == null)
    {
        messagetextblock.Text = "An error occurred while retrieving the license.";
        return;
    }

    // Use members of the appLicense object to access license info...

    // the customer can' t access this feature
    messagetextblock.Text = "customer hasn't bought the addon";

    // Access the valid licenses for durable add-ons for this app.
    foreach (KeyValuePair<string, StoreLicense> item in appLicense.AddOnLicenses)
    {
        StoreLicense addOnLicense = item.Value;
        // Use members of the addOnLicense object to access license info
        // for the add-on.

        // Specify the kinds of add-ons to retrieve.
        string[] productKinds = { "Durable", "Consumable", "UnmanagedConsumable" };
        List<String> filterList = new List<string>(productKinds);
        StoreProductQueryResult queryResult = await context.GetAssociatedStoreProductsAsync(filterList);

        if (addOnLicense.IsActive)
        {
            // the customer can access this feature
            messagetextblock.Text = "customer has bought the addon";
        }
    }
    
}
  

Комментарии:

1. Работает ли приложение прямо из Visual Studio или оно было установлено через MS Store? Возможно, API работает только с последним?

2. устанавливается из хранилища MS на разных машинах с тем же результатом.

3. У меня здесь два вопроса. 1) является ли это дополнение бесплатным дополнением? Если это так, то все пользователи получат активный результат. 2) когда вы тестируете его на других устройствах, используете ли вы ту же учетную запись? Если это та же учетная запись, когда учетная запись владеет надстройкой, то она также будет активна при использовании этой учетной записи даже на других устройствах. 3) Пробовали ли вы использовать другую учетную запись на других устройствах? Возвращает ли он также active?

4. Спасибо за ваши вопросы. Дополнение не является бесплатным и было приобретено только для тестирования на моем компьютере разработчика. Все другие компьютеры используют разные учетные записи Microsoft и не приобрели дополнение.

Ответ №1:

Трудно точно сказать, что может быть не так с вашим примером выше. Тем не менее, у меня есть приложение на рынке, которое использует два разных типа покупок в приложении. Один для удаления рекламы и один, который получает премиум-лицензию.

Разница между тем, как вы это делаете, и тем, как я это делаю, заключается в том, что я ищу идентификатор хранилища подписки в своих лицензионных артикулах, которые возвращаются вместе с лицензией.

вы уже пробовали этот метод?

         public static void CheckForPremiumStatus()
        {
#if DEBUG
            if (LicenseInformation.ProductLicenses["PremiumStatus"].IsActive)
            {
                IsPremium = RemoveAds = true;
            }
#else
            var subscriptionStoreId = "9PMT47KC5W6C";

            foreach (var addOnLicense in _appLicense.AddOnLicenses)
            {
                StoreLicense license = addOnLicense.Value;
                if (license.SkuStoreId.StartsWith(subscriptionStoreId))
                {
                    if (license.IsActive)
                    {
                        IsPremium = RemoveAds = true;
                        return;
                    }
                    else
                    {
                        break;
                    }
                }
            }

            IsPremium = RemoveAds = false;
#endif
        }
  

Вы можете увидеть полный пример здесь — не стесняйтесь копировать и вставлять его, если хотите. Просто поменяйте местами идентификаторы хранилища дополнений

Комментарии:

1. Спасибо за это. Я попробовал ваш метод и обнаружил ту же проблему. Итак, я создал новый дополнительный продукт в Партнерском центре с другим идентификатором, теперь он работает! Я думаю, что, должно быть, была проблема с предыдущим продуктом каким-то образом.