• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - 检测 Apple 订阅到期

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:49:20 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想检测该客户的订阅现已结束/完成,以便我可以删除我提供给他们的设施。

在每次启动应用程序时,我都会从 Apple 订阅中获得以下详细信息:

public void CheckIfSubscriptionIsActive(){
    ConfigurationBuilder builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
    // Get a reference to IAppleConfiguration during IAP initialization.
    IAppleConfiguration appleConfig = builder.Configure<IAppleConfiguration>();
    if (!string.IsNullOrEmpty (appleConfig.appReceipt)) {
        Debug.Log (appleConfig.appReceipt);
//            InstantiateDebugText (DebugInfoPanel, "APP Receipt Base64 " + appleConfig.appReceipt);
        var receiptData = System.Convert.FromBase64String (appleConfig.appReceipt);
//            InstantiateDebugText (DebugInfoPanel, "receipt Data "+ receiptData);
        AppleReceipt receipt = new AppleValidator (AppleTangle.Data ()).Validate (receiptData);
        InstantiateDebugText (DebugInfoPanel, "Apple receipt " + receipt);
        foreach (AppleInAppPurchaseReceipt productReceipt in receipt.inAppPurchaseReceipts) {
            Debug.Log ("RODUCTID: " + productReceipt.productID);
            Debug.Log ("URCHASE DATE: " + productReceipt.purchaseDate);
            Debug.Log ("EXPIRATION DATE: " + productReceipt.subscriptionExpirationDate);
            Debug.Log ("CANCELDATE DATE: " + productReceipt.cancellationDate);
            InstantiateDebugText (DebugInfoPanel, "RODUCTID: " + productReceipt.productID);
            InstantiateDebugText (DebugInfoPanel, "URCHASE DATE: " + productReceipt.purchaseDate);
            InstantiateDebugText (DebugInfoPanel, "EXPIRATION DATE: " + productReceipt.subscriptionExpirationDate);
            InstantiateDebugText (DebugInfoPanel, "CANCELDATE DATE: " + productReceipt.cancellationDate);
        }
    }

因为在检测订阅到期计算时,我无法获取当前 iPhone 日期和时间的帮助,而且我的应用没有使用任何与自定义服务器相关的东西,所以我完全依赖 Apple。

正是因为这个原因,我才使用 Auto Renewable Subscription,以便获得有关订阅期限的信息。

现在请分享您对此的想法,如何检测订阅是否已过期?



Best Answer-推荐答案


您应该先在 Appstore 验证您的收据。 使用您从以下获得的收据数据:

var receiptData = System.Convert.FromBase64String (appleConfig.appReceipt);

您可以从 here 查看如何使用苹果服务器验证收据

但是,不要转发从 status 收到的状态。对于 autoreniew 收据,即使收据有效但已过期,它也会返回成功。 作为回应,您将收到收据。遍历所有收据,检查产品 ID 的“expires_date”字段 = 您所需的产品 ID。 "expires_date"将包含 epoch time. .您可以检查此日期是否大于当前日期,如果您在 (productid = yourproducid && expireDate > currentEpocDate) 找到任何收据,则订阅有效。否则过期或停止或未购买。

创建 json,

  {
    "receipt-data": "receiptData (string))"
}

并将其发布到苹果的服务器 - ( https://sandbox.itunes.apple.com/verifyReceipt )。作为回应,您将收到带有验证状态的收据。

注意:

In the test environment, use https://sandbox.itunes.apple.com/verifyReceipt as the URL. In production, use https://buy.itunes.apple.com/verifyReceipt as the URL.

关于c# - 检测 Apple 订阅到期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42019936/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap