我正在使用Windows.Services.Store API向Windows商店中发布的Desktop Bridge应用程序添加附加订阅。
我创建了一个为期3个月的订阅测试附件,并提供了1周的试用期。我可以通过从我的应用中调用StoreContext.GetAppLicenseAsync
方法来获得一个StoreAppLicence实例,然后从其AddOnLicenses
属性中找到一个SkuStoreId
与{首先是测试插件。但是,由于此订阅不具有StoreAppLicence之类的IsTrial
属性,因此无法确定此订阅是处于试用期还是处于付费(完整)期。
因此,我想确定如何确定订阅是处于试用期还是处于付费期,以便向用户显示我的应用程序中的订阅状态。
更新
我还不太清楚,但是我想问的是当前用户已经“购买”了免费订阅的附加订阅之后的情况。我想知道如何确定试用期是否尚未结束或试用期是否已过,并且订阅已移至付费(完整)期。
可能可以通过以下方式来实现:在用户“本地”购买“订购”时存储数据,并将其与当前日期进行比较,但这似乎并不理想,因为可能与Windows Store管理的数据不一致服务器。
答案 0 :(得分:0)
C#示例:
val pair: Pair<TypeA, TypeB> = ...
object.run/*apply*/ {
val (first, second) = this
...
} // longer
object.let/*also*/ { (first, second) -> ... } // shorter
从示例Purchase a subscription add-on和类StoreSku Class派生
更新
如果用户可以使用订阅,则只有两种可能性,一种是试用期,另一种是他们已经购买。 代码中的方法( GetSubscriptionProductAsync )获取用户可以使用的订阅,您可以在示例( Purchase a cubscription add-on )中查看详细信息。属性HasTrialPeriod获取一个值,该值指示预订是否包含试用期。
答案 1 :(得分:0)
可能我找到了解决方法。
通过IsTrial
方法获得的StoreCollectionData的 StoreContext.GetUserCollectionAsync
属性提供了我所需要的信息。此外,StoreCollectionData还包括AcquiredDate
属性,该属性指示订阅附件的购买日期,可用于自行计算到期日期。以我的经验,通过ExpirationDate
方法获得的StoreLicense的StoreContext.GetAppLicenseAsync
属性似乎不准确(比实际失效日期晚三天)。
示例代码如下。
public enum LicenseStatus
{
Unknown = 0,
Trial,
Full
}
private static StoreContext _context;
public static async Task<(string storeId, LicenseStatus status, DateTimeOffset acquiredDate)[]> GetSubscriptionAddonStatusesAsync()
{
if (_context is null)
_context = StoreContext.GetDefault();
StoreProductQueryResult queryResult = await _context.GetUserCollectionAsync(new[] { "Durable" });
if (queryResult.ExtendedError != null)
throw queryResult.ExtendedError;
IEnumerable<(string, LicenseStatus, DateTimeOffset)> Enumerate()
{
foreach (KeyValuePair<string, StoreProduct> pair in queryResult.Products)
{
StoreSku sku = pair.Value.Skus.FirstOrDefault();
StoreCollectionData data = sku?.CollectionData;
if (data != null)
{
LicenseStatus status = data.IsTrial ? LicenseStatus.Trial : LicenseStatus.Full;
yield return (pair.Key, status, data.AcquiredDate);
}
}
}
return Enumerate().ToArray();
}
另一方面,StoreContext.GetUserCollectionAsync
方法上仍然存在一个奇怪的问题。它仅提供有关最新加载项的信息,而从其解释中,应提供有关所有加载项的信息。因此,如果您要检查多个加载项,此方法将是不够的。