检测Apple订阅过期



我想检测该客户的订阅现在已经结束/完成,这样我就可以删除我为他们提供的设施。

每次发布应用程序时,我都会从Apple Subscription获得以下详细信息:

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的日期和时间,而且我的应用程序没有使用任何与服务器相关的自定义内容,所以我完全依赖苹果。

因为正是因为这个原因,我使用了自动可再生订阅,这样我就有了关于订阅期限的信息。

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

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

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

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

但是,不要中继从状态接收到的状态。对于autorenew收据,即使收据有效但已过期,它也会返回成功。作为回应,您将收到收据。循环查看所有收据,检查产品id的"expires_date"字段=您所需的产品id。"expires_date"将包含epoch时间。您可以检查此日期是否大于当前日期,如果您发现任何收据(productid=yourproductid&&expireDate>currentEpocDate),则订阅有效。否则它将过期、停止或未购买。

创建json、

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

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

注:

在测试环境中,使用https://sandbox.itunes.apple.com/verifyReceipt作为URL。在里面生产、使用https://buy.itunes.apple.com/verifyReceipt作为URL。

最新更新