.net RequestPurchaseAsync()之后立即出现商店购买状态.未购买

wfypjpf4  于 2023-02-20  发布在  .NET
关注(0)|答案(1)|浏览(158)

bounty将在2天后过期。回答此问题可获得+100声望奖励。JaSHin希望引起更多人关注此问题。

在我通过Desktop Bridge打包的WPF应用程序中,我发现了一个问题,有些用户无法通过应用内购买购买插件。它显示我的“已取消”警报,表示StorePurchaseStatus.NotPurchased,其中result.ExtendedErrornull
目标框架是:

<TargetFramework>net7.0-windows10.0.19041.0</TargetFramework>

下面是采购的简化代码:

namespace MyApp {

    public partial class MainWindow: Window {
        private readonly StoreContext context;

         public MainWindow(){
            context = StoreContext.GetDefault();
         }
    

        private bool IsAdministrator()
        {
            var identity = WindowsIdentity.GetCurrent();
            var principal = new WindowsPrincipal(identity);
            return principal.IsInRole(WindowsBuiltInRole.Administrator);
        }

        private async void BuyButtonClick(object sender, RoutedEventArgs e) {

            if (IsAdministrator())
            {
                ShowAlert("Cannot run under administrator rights");
                return;
            }

            if (sender is Button button)
            {
                StoreProduct? storeProduct = ((Product)dataContext).storeProduct;

                if (storeProduct != null)
                {
                     Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(async delegate
                     {
                        var hwnd = new WindowInteropHelper(this).Handle;
                        WinRT.Interop.InitializeWithWindow.Initialize(context, hwnd);
                        var result = await context.RequestPurchaseAsync(storeProduct.StoreId);

                        switch (result.Status)
                        {
                            case StorePurchaseStatus.Succeeded:
                                ShowAlert("Succeeded");
                                break;
                            case StorePurchaseStatus.AlreadyPurchased:
                                ShowAlert("AlreadyPurchased");
                                break;
                            case StorePurchaseStatus.NotPurchased:
                                var extendedError = result.ExtendedError;

                                if (extendedError != null)
                                {
                                    ShowAlert(extendedError.Message);
                                }
                                else
                                {
                                    ShowAlert("Canceled");
                                }
                                break;
                            case StorePurchaseStatus.NetworkError:
                                ShowAlert("NetworkError");
                                break;
                            case StorePurchaseStatus.ServerError:
                                ShowAlert("ServerError");
                                break;
                        }

                     }
                }

            }

        }

    }

它在我的设备(Windows 11和Windows 10)上到处都能用,不能购买的用户有Windows 11。

ogq8wdun

ogq8wdun1#

这可能是由客户使用的帐户类型引起的。
首先,如果应用程序以管理员身份运行,商店购买将失败。
普通的“管理员”账户(管理员组中有一个分割令牌的人)只会以标准用户的身份运行桌面桥应用程序,除非他们右键单击并启动显式提升的内容。
但如果客户在其设备上使用系统内置帐户,则购买将失败,因为应用将以管理员身份运行。Microsoft应用商店购买API不允许这样做。

相关问题