• UWP: 体验应用内购新接口——StoreContext类


    Windows 1607 版本(内部版本 14393)之后,微软在 SDK 添加了一些与应用商店相关的新接口,像应用试用与购买、应用内购等。这些接口相对于原来的接口要方便很多。就拿应用内购来说,以前的方式是:开发时,为了方便测试,在项目中添加一个 xml 文件,此文件描述了应用内的产品信息,然后使用 CurrentAppSimulator 来完成相关的操作;当应用要发布到商店时,再将所有的 CurrentAppSimulator 替换成 CurrentApp;而使用新接口,则可以直接在开发环境中,就可以访问我们在开发人员中心(dev.windows.com/dashboard)中添加的产品,这样就和实际的购买操作完全一样,所以新接口更方便,更直观。

    新接口的信息如下:

    命名空间:Windows.Services.Store
    类:StoreContext

    以下通过一个 Demo 来体验一下:

    1. 首先,在 Windows 开发人员中心,创建一个新的应用作为本次测试的应用,并在它里面创建若干个加载项,并设置好对应的标题、价格等;另外,本例中创建的加载项类型为 Durable 类型,即耐用型。

    2. 接下来,新建一个 UWP Project,注意 TargetVersion 和 MinVersion,都应该选 Windows Aniversary Edtion (10.0, Build 14393)。新建完成后,右击项目,选择 Store (商店) -> Associate app with the Store(将 App 与商店关联),在打开的窗口中,将这个项目与刚才在开发人员中心中创建的应用相关联。

    3. 将以下 XAML 内容放到 MainPage.xaml 中:

        <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
            <ListView x:Name="listProducts" IsItemClickEnabled="True" SelectionMode="Single" ItemClick="listProducts_ItemClick">
                <ListView.ItemTemplate>
                    <DataTemplate >
                        <TextBlock Text="{Binding Title}" />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Grid>

    4. 在 MainPage.xaml.cs 中,添加对命名空间 Windows.Services.Store 的引用,并将以下代码放进去:

            private readonly StoreContext storeContext = StoreContext.GetDefault();
    
            public MainPage()
            {
                this.InitializeComponent();
                Loaded += MainPage_Loaded;
            }
    
            private async void MainPage_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
            {
                var result = await storeContext.GetAssociatedStoreProductsAsync(new string[] { "Durable" });
                if (result.ExtendedError != null)
                {
                    // 出错了
                }
                else
                {
                    // 列出所有耐用的(Durable)内购项,并显示
                    StringBuilder sb = new StringBuilder();
                    var products = result.Products.Values;
                    foreach (var item in products)
                    {
                        sb.AppendLine($"{item.Title} - {item.StoreId} - {item.InAppOfferToken} - {item.ProductKind} - {item.Price.FormattedPrice}");
                    }
                    await new MessageDialog(sb.ToString(), string.Empty).ShowAsync();
    
                    this.listProducts.ItemsSource = products;
                }
            }
    
            private async void listProducts_ItemClick(object sender, ItemClickEventArgs e)
            {
                StoreContext context = StoreContext.GetDefault();
                var product = e.ClickedItem as StoreProduct;
                var result = await context.RequestPurchaseAsync(product.StoreId);
                if (result.Status == StorePurchaseStatus.Succeeded)
                {
                    // 成功购买
                }
                else if (result.Status == StorePurchaseStatus.AlreadyPurchased)
                {
                    // 已经购买过了
                }
                else if (result.Status == StorePurchaseStatus.NotPurchased)
                {
                    // 用户没购买,即用户中途取消了操作
                }
                else if (result.Status == StorePurchaseStatus.ServerError || result.Status == StorePurchaseStatus.NetworkError)
                {
                    // 发生错误
                }
            }

    编译运行,当从商店获取内购产品完成后,应用将弹出一个对话框显示这些内购产品项的信息。在页面的列表中,点击某一项,即可对该产品进行购买,这个过程和真正的购买操作是完成一样的,并且,它就是真正的购买过程。所以,使用新 API 就是这样简单。

    由于上述代码中已经有详细的注释,所以对代码不再解释,如果想要过多了解关于 StoreContext 类以及相关信息,可以参考:

    StoreContext Class

    ProductKind

    应用内购买和试用

    作者:WPInfo

    本文系作者原创,欢迎转载;如需转载,请注明出处。

    公众号:.NET之窗 (WinDotNET),更多原创、优质技术文章,欢迎扫码关注。

  • 相关阅读:
    C# 装箱原型
    C# 反射浅谈(一)
    javascript介绍(二)
    javascript介绍(一)
    C#中 托管资源和非托管资源
    varchar && nvarchar 闲谈
    高内聚&&低耦合
    【android】移植IOS视图响应陀螺仪交互行为
    【android】如何实现猿题库题目的排版
    开心工作标准的硬件环境
  • 原文地址:https://www.cnblogs.com/wpinfo/p/6472990.html
Copyright © 2020-2023  润新知