StoreProduct IsInUserCollection 始终为 false
StoreProduct IsInUserCollection is always false
我们在 Microsoft Store 中有一个 UWP 产品。该产品有许多订阅附加组件。用户在应用程序内购买订阅附加组件。
编辑 我们的代码是从微软文档中拼凑出来的 Enable subscription add-ons for your app
StorePurchaseResult result = await product.RequestPurchaseAsync();
if (result.Status == StorePurchaseStatus.Succeeded)
结果returnsStorePurchaseStatus.Succeeded
。微软拿了用户的钱用于订阅附加组件。目前一切顺利。
我们得到了这样的产品列表
string[] productKinds = { "Durable" };
List<String> filterList = new List<string>(productKinds);
StoreProductQueryResult queryResult = await storeContext.GetAssociatedStoreProductsAsync(filterList);
productList = queryResult.Products.Values.ToList();
然后遍历
foreach (StoreProduct storeProduct in products)
{
if (storeProduct.IsInUserCollection)
...
}
但 storeProduct.IsInUserCollection
总是 returns 错误。 Microsoft 已接受附加组件的付款,但未将其添加到用户的产品集合中,因此我们无法验证他们是否已为附加组件付款。
我们哪里错了?
编辑 2 根据@lukeja 的建议我运行 这个方法
async Task CheckSubsAsync()
{
StoreContext context = context = StoreContext.GetDefault();
StoreAppLicense appLicense = await context.GetAppLicenseAsync();
foreach (var addOnLicense in appLicense.AddOnLicenses)
{
StoreLicense license = addOnLicense.Value;
Debug.WriteLine($"license.SkuStoreId {license.SkuStoreId}");
}
}
这只输出一个附加组件。免费的附加组件。我们有 16 个附加组件,其中只有一个是免费的。
为什么我们的付费附加订阅没有返回?
EDIT 3 appLicense.AddOnLicenses
仅包括当前用户的附加许可,而不是应用程序的所有附加许可。当 运行 在支付订阅的用户的上下文中时,@lukeja 提供的代码示例按预期工作。
我不确定您为什么要使用该方法。我目前在我的应用程序中执行此操作的方式以及 Microsoft 文档建议的方式是这样的...
private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
StoreAppLicense appLicense = await context.GetAppLicenseAsync();
// Check if the customer has the rights to the subscription.
foreach (var addOnLicense in appLicense.AddOnLicenses)
{
StoreLicense license = addOnLicense.Value;
if (license.IsActive)
{
// The expiration date is available in the license.ExpirationDate property.
return true;
}
}
// The customer does not have a license to the subscription.
return false;
}
我们在 Microsoft Store 中有一个 UWP 产品。该产品有许多订阅附加组件。用户在应用程序内购买订阅附加组件。 编辑 我们的代码是从微软文档中拼凑出来的 Enable subscription add-ons for your app
StorePurchaseResult result = await product.RequestPurchaseAsync();
if (result.Status == StorePurchaseStatus.Succeeded)
结果returnsStorePurchaseStatus.Succeeded
。微软拿了用户的钱用于订阅附加组件。目前一切顺利。
我们得到了这样的产品列表
string[] productKinds = { "Durable" };
List<String> filterList = new List<string>(productKinds);
StoreProductQueryResult queryResult = await storeContext.GetAssociatedStoreProductsAsync(filterList);
productList = queryResult.Products.Values.ToList();
然后遍历
foreach (StoreProduct storeProduct in products)
{
if (storeProduct.IsInUserCollection)
...
}
但 storeProduct.IsInUserCollection
总是 returns 错误。 Microsoft 已接受附加组件的付款,但未将其添加到用户的产品集合中,因此我们无法验证他们是否已为附加组件付款。
我们哪里错了?
编辑 2 根据@lukeja 的建议我运行 这个方法
async Task CheckSubsAsync()
{
StoreContext context = context = StoreContext.GetDefault();
StoreAppLicense appLicense = await context.GetAppLicenseAsync();
foreach (var addOnLicense in appLicense.AddOnLicenses)
{
StoreLicense license = addOnLicense.Value;
Debug.WriteLine($"license.SkuStoreId {license.SkuStoreId}");
}
}
这只输出一个附加组件。免费的附加组件。我们有 16 个附加组件,其中只有一个是免费的。
为什么我们的付费附加订阅没有返回?
EDIT 3 appLicense.AddOnLicenses
仅包括当前用户的附加许可,而不是应用程序的所有附加许可。当 运行 在支付订阅的用户的上下文中时,@lukeja 提供的代码示例按预期工作。
我不确定您为什么要使用该方法。我目前在我的应用程序中执行此操作的方式以及 Microsoft 文档建议的方式是这样的...
private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
StoreAppLicense appLicense = await context.GetAppLicenseAsync();
// Check if the customer has the rights to the subscription.
foreach (var addOnLicense in appLicense.AddOnLicenses)
{
StoreLicense license = addOnLicense.Value;
if (license.IsActive)
{
// The expiration date is available in the license.ExpirationDate property.
return true;
}
}
// The customer does not have a license to the subscription.
return false;
}