Notificación de cancelación de renovación automática para una compra en la aplicación

Estoy trabajando en una aplicación de iPhone y quiero implementar el nuevo model de renovación automática para compras en la aplicación. Puedo implementar exitosamente las transactions e incluso puedo suscribirme a la aplicación, pero ¿qué pasa si el usuario cancela la suscripción de renovación automática?

¿Cómo podré saber que se ha cancelado y, por lo tanto, no continuar permitiendo el acceso (una vez caducado)?

Puede encontrar la date de vencimiento de la suscripción de un usuario enviando una verificación de recibo a los serveres de Apple. Consulte la figura 1-3 en la Guía de progtwigción de compra en la aplicación .

Básicamente los pasos son:

  1. En el dispositivo, obtenga un recibo de transacción para una compra en la aplicación. Cualquiera que haya guardado durante una transacción o llamando a [SKPaymentQueue restreCompletedTransactions] .
  2. Envíe ese recibo a su server. (Esto es preferible a intentar hacer una verificación de recibo con los serveres de Apple directamente desde la aplicación, ya que eso requeriría que guardes tu secreto compartido en el dispositivo).
  3. Envíe el recibo a los serveres de Apple desde su server y, en la respuesta, busque una key llamada expires_date (expresada en mili segundos desde el 1 de enero de 1970 GMT).

Utilicé esta guía para ayudarme en el lado del server: Verificación de los recibos de Apple App Store en las compras de aplicaciones con PHP y cURL .

No hay forma de determinar si el usuario tiene la renovación automática activada o desactivada. Apple no le da acceso a esta información. La única forma es esperar hasta que la date de vencimiento pase sin una renovación.

si el estado del recibo es 21006 y hay una key llamada cancellation_date , entonces es una cancelación, puede encontrar la nueva date de caducidad en esa key, pero es una date formateada, si necesita un mejor valor para analizar la receipt['latest_expinetworking_receipt_info']['cancellation_date_ms'] del receipt['latest_expinetworking_receipt_info']['cancellation_date_ms'] igual que expires_date