能否在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
相关产品推荐
相关产品推荐

