检测Apple订阅过期

时间:2017-02-03 08:34:24

标签: c# ios iphone unity3d

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

每次推出应用程序时,我都会从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 ("PRODUCTID: " + productReceipt.productID);
            Debug.Log ("PURCHASE DATE: " + productReceipt.purchaseDate);
            Debug.Log ("EXPIRATION DATE: " + productReceipt.subscriptionExpirationDate);
            Debug.Log ("CANCELDATE DATE: " + productReceipt.cancellationDate);
            InstantiateDebugText (DebugInfoPanel, "PRODUCTID: " + productReceipt.productID);
            InstantiateDebugText (DebugInfoPanel, "PURCHASE DATE: " + productReceipt.purchaseDate);
            InstantiateDebugText (DebugInfoPanel, "EXPIRATION DATE: " + productReceipt.subscriptionExpirationDate);
            InstantiateDebugText (DebugInfoPanel, "CANCELDATE DATE: " + productReceipt.cancellationDate);
        }
    }

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

因为只有这个原因我才使用自动续订订阅,所以我有关于订阅持续时间的信息。

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

1 个答案:

答案 0 :(得分:3)

您应首先使用Appstore对yoru收据进行验证。 使用您从以下获得的收据数据:

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

您可以通过here

查看如何使用Apple服务器验证收据

但是,不要接收状态收到的状态。对于autoreniew收据,即使收据有效但已过期,它也会返回成功。 作为回应,您将收到收据。循环浏览所有收据,检查&#34; expires_date&#34;产品ID字段=您所需的产品ID。 &#34; expires_date&#34;将包含epoch time.。您可以检查此日期是否大于当前日期,如果您发现任何收据(productid = yourproducid&amp;&amp; expireDate&gt; currentEpocDate),则订阅有效。否则它已过期或停止或未购买。

创建json,

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

并将其发布到Apple的服务器 - (https://sandbox.itunes.apple.com/verifyReceipt)。作为回应,您将收到有效身份的收据。

注意:

  

在测试环境中,使用   https://sandbox.itunes.apple.com/verifyReceipt作为网址。在   制作时,请使用https://buy.itunes.apple.com/verifyReceipt作为网址。

相关问题