从Windows应用商店首次下载UWP应用时,如何确定日期和应用版本?

时间:2018-07-20 13:09:53

标签: uwp windows-10-universal windows-store

我有一个基本的Windows 10 UWP应用程序:

  • 1.0版是付费应用
  • 在2.0版中,我添加了免费试用版
  • 在3.0版中,我想切换为“使用应用内购买免费”。

我想让所有将1.0或2.0版下载到旧功能集中的现有用户,而对于首次下载v3.0的新用户应提供应用内购买选项。

为此,我需要能够确定每次启动我的应用时从Windows应用商店首次购买/下载该应用的初始应用版本(或日期),以便我知道要提供的功能集。

我发现了Windows.ApplicationModel.Store.CurrentApp,但文档显示该命名空间不再使用。我如何知道用户最初购买该应用程序的版本?

2 个答案:

答案 0 :(得分:0)

  

我想让所有将1.0或2.0版下载到旧功能集中的现有用户,而对于首次下载v3.0的新用户应提供应用内购买选项。

目前,没有内置的API供您执行。您必须自己对代码进行判断。

例如,您可以使用LocalSettings在以前的项目(v1,v2)代码中进行标记,如下所示:

Windows.ApplicationModel.Package package = Package.Current;
PackageId packageId = package.Id;
PackageVersion version = packageId.Version;
if (version.Major < 3)
{
     ApplicationData.Current.LocalSettings.Values["IsForPreviousVersion"] = true;
}

然后,您可以为现有用户向商店发布2.x.x.x版本,让他们更新其已安装的应用程序。他们打开您的应用后,您的代码将起作用,并且该标志将位于LocalSettings中。当它们更新到下一个应用程序版本时,不会清除LocalSettings。但是,如果用户在更新应用程序时未打开您的应用程序,则不会在LocalSettings中创建该标志。因此,您需要通知用户在更新到此2.x.x.x版本时打开您的应用。

之后,您可以将v3.0发布到商店,并在代码中进行判断,如下所示:

var IsForPreviousVersion = ApplicationData.Current.LocalSettings.Values["IsForPreviousVersion"];
if (IsForPreviousVersion != null)
{
    // is for previous version users
}

答案 1 :(得分:0)

StoreCollectionData.AcquiredDate Property (Windows.Services.Store)会告诉您何时购买该应用程序。由于您知道更新的发布时间,因此可以在获取的日期推断出他们购买了哪个版本。

public static async Task<StoreProductQueryResult> GetAppGameProduct(string ProductId)
{
    string[] productKinds = { "Application", "Game" };

    List<String> filterList = new List<string>(productKinds);
    List<String> idsList = new List<string>();
    idsList.Add(ProductId);
    if (_products == null)
    {
        _products = await _storeContext.GetStoreProductsAsync(filterList, idsList);
    }
    return _products;
}

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    var all = await GetAppGameProduct("<Product Id - See App Identity").ConfigureAwait(true);
    foreach (var product in all.Products)
    {
        IReadOnlyList<StoreSku> skus = (product.Value as StoreProduct).Skus;

        for (int i = 0; i < skus.Count; i++)
        {
            Debug.WriteLine(@"{0} {1}", "Title: ", skus[i].Title);
            Debug.WriteLine(@"{0} {1}", "IsTrial: ", skus[i].IsTrial);
            if (skus[i].CollectionData != null)
            {
                Debug.WriteLine(@"{0} {1}", "CollectionData.AcquiredDate: ", skus[i].CollectionData.AcquiredDate);
            }
        }
    }
}