Questions about renewal of subscriptions

Hello,


We use auto-renewing subscriptions. We are trying to properly refresh the receipts from our server to make sure the user's subscription is always taken in account even when they haven't opened the app in a while.


We cache the latest receipt on our server and we use its fields to determine if we should refresh the receipt.


We are running into some combination of fields that don't make sense to us:


1.

expiration date is in the past (9 days ago)

expiration_intent is not present

autorenew_status is 0

is_billing_retry_period is 0

How can this be possible? If the autorenew_status is 0, this means that the user has switched it off. Why is expiration_intent not present then?


2.

expiration date is in the past (62 days ago)

expiration_intent is 2

autorenew_status is 0

is_billing_retry_period is 0


How can this be possible? Expiration_intent means that there is a payment problem. But is_billing_retry_period is 0 which means that Apple isn't attempting to renew the purchase.


Basically, in both cases we don't understand what scenario could lead to this combination of flags?

More generally, what can we use out of the receipt to determine if we should or not attempt to refresh the receipt?


Thanks!

Replies

1) You only need an 'intent' to do (or not do) something if you will be asked to do (or not do) something. Since the subscription has expired, they will no longer be asked if they want to renew so their intent to renew (or not renew) is irrelevant. Exactly why they did not renew has been lost in the ether but it doesn't fit 1-5.


2) 62 days ago (actually 63 and then again 62 days ago) Apple attempted to renew the subscription but discovered that the credit card was expired (or something like that). Apple informed the user but the user did not respond. So the subscription has expired and Apple is no longer trying to renew.


>what can we use out of the receipt to determine if we should or not attempt to refresh the receipt?

if your latest receipt (expired_date) indicates the subscription has expired then refresh the receipt once and accept the response.

> >what can we use out of the receipt to determine if we should or not attempt to refresh the receipt?

> if your latest receipt (expired_date) indicates the subscription has expired then refresh the receipt once and accept the response.


I don't this is is correct because you can have a response as follow:


- expiration date is in the past (a couple days ago)

- expiration_intent is not present

- autorenew_status is 1

- is_billing_retry_period is 1


In this case, you don't want to accept the response but you want to refresh again.

Well "...indicates the subscription has expired" may have been to precise.

You can use the "is_billing_retry_period is 1" to place the user in the ambiguous state of "expired but may renew - try again later"