You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在UWP应用App2中查询App1的内购附加组件购买情况?

在UWP中跨应用检查附加组件购买状态的实现方法

可以实现,但有个前提:App1和App2必须属于同一个开发者账户,且附加组件是通过Microsoft Store发布的。以下是具体实现步骤和注意事项:

核心实现逻辑

利用UWP的StoreContext API,可查询当前用户在指定应用(App1)下的附加组件购买记录。

1. 获取Store上下文并验证用户身份

首先需要获取当前用户的Store上下文,若用户未登录,需触发登录验证流程,否则无法访问购买记录。

2. 查询App1的附加组件购买情况

调用StoreContext.GetUserCollectionAsync方法,传入App1的Product ID(可在Microsoft Store开发者后台获取),同时指定要检查的附加组件Product ID列表,遍历结果判断是否已购买。

示例代码

private async Task<bool> CheckApp1AddOnOwnership(string app1ProductId, List<string> targetAddOnIds)
{
    var storeContext = StoreContext.GetDefault();

    // 触发用户登录验证(若未登录)
    var authResult = await storeContext.RequestPurchaseAsync("");
    if (authResult.Status != StorePurchaseStatus.Succeeded && authResult.Status != StorePurchaseStatus.AlreadyPurchased)
    {
        // 用户未完成身份验证,无法查询
        return false;
    }

    // 查询App1的用户购买集合
    var queryResult = await storeContext.GetUserCollectionAsync(
        new List<string> { app1ProductId },
        StoreProductCollectionQueryType.IncludeInstalled);

    if (queryResult.ExtendedError != null)
    {
        // 处理查询异常
        return false;
    }

    // 遍历查询结果,检查目标附加组件是否已购买
    foreach (var appProduct in queryResult.Products.Values)
    {
        foreach (var addOn in appProduct.InAppProducts.Values)
        {
            if (targetAddOnIds.Contains(addOn.ProductId) && addOn.IsInUserCollection)
            {
                return true;
            }
        }
    }

    return false;
}

关键注意事项

  • 开发者账户一致性:两个应用必须归属同一开发者账户,否则Microsoft Store不会授权跨应用查询购买记录。
  • 权限声明:需在App2的Package.appxmanifest中添加internetClient权限,确保应用能连接到Store服务。
  • Product ID准确性:App1和附加组件的Product ID必须与开发者后台的信息完全一致,否则查询会失败。
  • 用户登录处理:若用户未登录Microsoft账户,必须通过RequestPurchaseAsync触发登录,否则无法获取用户的购买数据。

内容的提问来源于stack exchange,提问作者Ask Too Much

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:52:57