在应用程序购买过期后,在应用程序的许可证信息中没有记录AddOnLicenses属性

时间:2016-12-09 17:16:48

标签: windows-store-apps in-app-purchase uwp windows-10-universal

我的耐用应用内购买存在问题。出于测试目的,我已将我的应用的高级试用版IAP设置为在一天后过期。我从https://msdn.microsoft.com/en-gb/windows/uwp/monetize/get-license-info-for-apps-and-add-ons复制了以下代码以获取应用的许可证信息:

    private StoreContext context = null;
    private async Task<bool> getLicenseInfo()
    {
        try
        {
            if (context == null)
            {
                context = StoreContext.GetDefault();
            }

            StoreAppLicense appLicense = await context.GetAppLicenseAsync();

            // license wasn't retrieved, for example because user is offline, so..
            // need to fallback on non-premium version
            if (appLicense == null)
            {
                return false;
            }

            // iterate through the add on licenses for add-ons for this app.
            foreach (KeyValuePair<string, StoreLicense> item in appLicense.AddOnLicenses)
            {
                StoreLicense addOnLicense = item.Value;
                if (addOnLicense.InAppOfferToken.Equals("test1_premium"))
                    Windows.Storage.ApplicationData.Current.RoamingSettings.Values["PremiumPurchased"] = addOnLicense.IsActive;
                else if (addOnLicense.InAppOfferToken.Equals("test1_premiumTrial"))
                    Windows.Storage.ApplicationData.Current.RoamingSettings.Values["PremiumTrialActive"] = addOnLicense.IsActive;
            }

            return true;
        }
        catch( Exception e )
        {
            return false;
        }
    }

在购买高级试用版IAP后的24小时内,高级试用版IAP将在appLicense.AddOnLicenses中返回,并在正确的到期时间内正确设置为活动状态。但是,大约一天后(我不是100%),appLicense.AddOnLicenses不再包含IAP记录(因此未输入循环,导致RoamingSetting的值表示IAP的活动状态没有更新,以反映它可能已过期,即错误)。

事实上IAP对我有一个isActive属性表明IAP甚至在它们过期之后仍应保留appLicense.AddOnLicenses中的记录,尽管isActive设置为false。然而,我所看到的可能会暗示其他情况。有人可以就此提供任何澄清吗?如果确认过期的IAP确实删除了其记录,那么它将是直截了当的 - 如果没有找到记录,只需将IAP的RoamingSetting设置为false。但是,我有一种感觉,这里可能需要一个不同的解决方案。

1 个答案:

答案 0 :(得分:0)

我可以确认过期的IAP会在我的应用中删除其记录,这样我们就需要做一些记录,就像你说使用RoamingSetting检查IAP是否过期一样。

此外,我会咨询相关团队,看看它是否是预期的行为。

另一种解决方法是使用Windows.ApplicationModel.Store命名空间实现IAP,我们可以使用以下方法检查IAP的到期日期:

LicenseInformation licenseInformation = CurrentApp.LicenseInformation;
if(licenseInformation.ProductLicenses[productId].IsActive)
  {
     var productLicense1 = licenseInformation.ProductLicenses[productId];
     var longdateTemplate = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("longdate");
     MyExpireDataTextBlock.Text = "ExpirationDate" + longdateTemplate.Format(productLicense1.ExpirationDate) + ". remain days: " + (productLicense1.ExpirationDate - DateTime.Now).Days;

   }
 else
   {

   }