2017-02-03 1 views
2

Я хочу, чтобы подписка на подписку теперь была закончена/завершена, поэтому я могу удалить объекты, которые я им предоставлял.Обнаружение истечения срока подписки Apple

На каждом запуске приложения, я следующий вид деталей из компании 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 для этого.

Потому что только по этой причине я использовал автоматическую возобновляемую подписку, чтобы у меня была информация о продолжительности подписки.

Теперь, пожалуйста, поделитесь своей мыслью об этом, как определить срок подписки истек?

ответ

3

Вы должны в первую очередь прислать квитанцию ​​yoru с Appstore. использование получение данных вы получаете из следующих действий:

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

Вы можете проверить, как проверить квитанцию ​​с яблочным сервера от here

Однако, не ретранслировать на статус получил от статуса. для получения автозапуска, он вернет успех, даже если квитанция действительна, но истек. В ответ вы получите квитанции. Прокрутите все квитанции, проверьте поле «expires_date» для идентификатора продукта = ваш идентификатор требуемого продукта. «expires_date» будет содержать epoch time.. Вы можете проверить, больше ли эта дата, чем текущая дата, и если вы обнаружили какую-либо квитанцию, где (productid = yourproducid & & expireDate> currentEpocDate), подписка действительна. иначе его истек или остановили или не приобрели.

Создание JSON,

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

и отправить его на сервер яблока - (https://sandbox.itunes.apple.com/verifyReceipt). В ответ вы получите квитанцию ​​с статусом validaton.

Примечание:

В тестовой среде используйте https://sandbox.itunes.apple.com/verifyReceipt как URL. В продукции используйте URL-адрес https://buy.itunes.apple.com/verifyReceipt.

+0

спасибо за ваш замечательный ответ. Позвольте мне задать другие сомнения: 1) для проверки истечения срока подписки, мы должны запросить наш пользовательский сервер? 2) Информацию об истечении срока подписки можно получить непосредственно из яблока? а не оставаться зависимыми от настраиваемого сервера? – Siddharth

+0

Вы можете напрямую проверить на сервере Apple статус подписки. Даже если вы используете настраиваемый сервер, ваш пользовательский сервер должен отправить запрос на сервер Apple для проверки получения. как я добавил в примечании: вы можете использовать данный url для проверки и, пожалуйста, проверьте https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html один раз. – Darshana

+0

выше вы указали сравнение даты истечения срока действия и текущей даты для проверки цели подписки, для чего это необходимо? если яблоко ответит мне о статусе подписки в соответствии с вашим последним сообщением. Это меня пугает. Поскольку без настраиваемого сервера я не могу принять текущую дату iphone для проверки подписки. – Siddharth