Question About Ios Receipt Fields Addition on July 19 2017

There's a recent changes on the Receipt Field after we validate our receipt data.


According to Itune, here are those fields

  1. is_in_billing_retry_period
  2. auto_renew_status
  3. pending_renewal_info
  4. price_consent_status
  5. expiration_intent
  6. cancellation_reason


So our question is:


1. is_in_billing_retry_period

According to Itune Documentation, we should be receiving 2 value (0,1) and each indicate they still retrying or they not gonna retry anymore.

So the question is,

  1. When we receive 1, does anyone know how long we should wait before we can retry to validate the receipt again? During this time, we should consider them as Lasped Subscription right?
  2. When we receive 0, does the customer's subscription should considered Lapsed or Cancelled? If it's cancelled, will we be getting a cancellation_date alongside it?

2. auto_renew_status

In the documentation, they mentioned the following statement:

"This key is only present for auto-renewable subscription receipts, for active or expired subscriptions.

The value for this key should not be interpreted as the customer's subscription status."

When 0, does it means that the user turn off the auto renew through Itune and they can turn back on again anytime through Itune interface right?

The reason I asking this because we have our own web application as well.

So this field is important for us to know. As previously we only validate against the cancellation_date only.

3. pending_renewal_info

When validate against the receipt_data that we have, we see that this field is returned as an Array.

So it kept us thinking that does this means that Itune will be treating 1 Itune Account can have multiple Active Subscription?

In what scenario it will reponse with multiple Pending Renewal Info?

As for the data inside this array, It contains 3 attribute, 2 of which is product_id related and called "auto_renew_product_id" and "product_id".

Was thinking how does this two differ? In what scenario that we will be using these two values?

4. price_consent_status

In the documentation, it was mentioned that it will response 2 value (0,1).

So the question is,

When the value is 0 and at the time of renewal, it says that the subscription will expires. Does this means we need to treat it as Lasped Subscription?


Thanks in advance for all the help in answering the question. 😀 It will help us alot in improving out app.

Replies

When we receive 1, does anyone know how long we should wait before we can retry to validate the receipt again? During this time, we should consider them as Lasped Subscription right?

The billing retry period start approximately 24 hours before the expiration date and will retry for up to 60 days, so the subscription may or may not be lapsed. I haven't seen any documentation on how frequently Apple retries, only how long they will retry. You shouldn't use this field to determine if the subscription is lapsed or not. Use the standard expiration date field for that. You can, however, use the expiration date in combination with this field and the "expiration_intent" field to provide better messaging to the user or a grace period that you can define (e.g. if the subscription is expired, and the app store is still retrying and "expiration_intent" says there's a billing error, give them a 2 day grace period and tell the user to update their payment details).


When we receive 0, does the customer's subscription should considered Lapsed or Cancelled? If it's cancelled, will we be getting a cancellation_date alongside it?

I have only seen t"is_in_billing_retry_period" show up for subscriptions that have been cancelled or that have lapsed. If the subscription is active, it does not show up at all. If it was cancelled, you will get the cancellation_date in the receipt.


When 0, does it means that the user turn off the auto renew through Itune and they can turn back on again anytime through Itune interface right?

Correct. They can turn it off, they can resubscribe again.


As for the data inside this array, It contains 3 attribute, 2 of which is product_id related and called "auto_renew_product_id" and "product_id". Was thinking how does this two differ? In what scenario that we will be using these two values?

The three attributes you mentioned will always be there no matter what state the subscription is in. If the subscription is in the billing retry period (or the subscription is expired), you will also see "is_in_billing_retry_period". If the subscription is expired, you will also see the "expiration_intent" field in there. The "product_id" is the product they are currently subscribed to. The auto_renew_product_id is the product they will be subscribed to when their subscription renews. These values can be different if you offer multiple tiers of subscriptions. So, for example, if the user initially signs up for "1 week basic subscription", and then they go into iTunes and switch to the "1 week++ subscription", the "product_id" will be "1_week_basic" and auto_renew_product_id will be "1_week_plusplus". You can then know that after 7 days they be subscribed to a new subscription tier and whether they're upgrading or downgrading.


As for the first part of question 3, I don't know the answer to "does this means that Itune will be treating 1 Itune Account can have multiple Active Subscription". However, I think one of the takeaways here is that you seem to be trying to use these new fields to determine if a subscription should be considered lapsed or not, and that's not their intention. Always use the expiration date field to determine if the subscription has lapsed. Use the new fields to gain insight to why a subscription has lapsed or why a user has cancelled or provide better messaging to the user.

Thank you so much for answering, it helps us alot more in understanding the way it works for IOS receipt.


Yup, you are right on what we trying to achieve in exploring the IOS receipt params to know has the customer cancelled their subscription or not. And whether it is still active or lapsed.


So basically there are two ways to know when a Itune subscription has been cancelled right?

1. When a cancellation_date is present and the cancellation_intent would present.

2. When a expires_date is present and the expiration_intent's value is set to '1'


And just to confirm our understanding, the auto-renew turned off and also subscription cancellation is two different thing right?

As auto-renew turned off means customer turned it off in Itune Interface and they can resume any time. without needing to go through our ipad app.

subscription cancelled is cancelled and to re-subscribe, they need to go through our ipad app in order to subscribe back.


Thanks 😀

I believe that 'cancelled' means that the user has contacted Apple and said that they really don't want their current subscription and want their money back while 'expiration_intent' et al all refer to whether the user wants the subscription to auto-renew at the end of the current subscription period. Therefore:


>And just to confirm our understanding, the auto-renew turned off and also subscription cancellation is two different thing right?

YES


>So basically there are two ways to know when a Itune subscription has been cancelled right?

NO - your #2 is not a 'cancelled' event; use cancellation_date


>subscription cancelled is cancelled and to re-subscribe, they need to go through our ipad app in order to subscribe back.

I do not know about this edge case. They might be able to do it through their 'manage subscription' page especially if the 'cancelled' action took place to cancel a subscription period that took place after a few subscription periods had already autorenewed.

Post not yet marked as solved Up vote reply of PBK Down vote reply of PBK

Thank you so much PBK for answering my question,


😀 Thanks for confirming my question regarding the fields to identify subscription cancellation. So for this "When a expires_date is present and the expiration_intent's value is set to '1'" question, I should consider this a s Lapsed subscription right? Currently our app is using cancellation_date to make sure that the subscription is really cancelled. Now with the latest addition of fields since July 19 2017, we wanna make sure the current old way of identifying subscription cancellation still the same or not.


But thank you again. 😀 Thanks you and flipabit for the helpful response. xD

> So for this "When a expires_date is present and the expiration_intent's value is set to '1'" question, I should consider this a s Lapsed subscription right?

The "expires_date" will always be present in a subscription receipt. To determine if a subscription has lapsed, simply use the logic "If the current time is before expires_date, the subscription is active. If the current time is after expires_date, the subscription has lapsed. If 'cancellation_date' is present, consider the subscription lapsed". Once you've done that and determined the subscription has lapsed, then you can look at the "expiration_intent" field to see why it has lapsed.


>subscription cancelled is cancelled and to re-subscribe, they need to go through our ipad app in order to subscribe back.


PBK is correct. A user can re-subscribe outside of you app through the iTunes Manage Subscriptions section. Apple can send subscription notifications to your servers (if you have any) so you can know without the user needing to re-enter the app.


Also, as PBK mentioned, cancellation_date is only present if the customer contacted Apple customer support to have the subscription immediately cancelled. If the user only auto-renew themselves through the "Manage Subscriptions" area of their iTunes account, the subscription will still be active until the "expires_date" and will not renew. In that second case there will not be a "cancellation_date" field, but the auto_renew_status field will change from 1 to 0. Basically nothing has changed in the way you determine a lapsed/cancelled subscription, you just have a little extra info that you can ignore if you want.

There is one difference between lapsed and cancelled. A cancelled subscription should be considered to have lapsed some time in the past. So:


User subscribes, subscription becomes active. Subscription has an expiration date of Start+Duration.

Subscription autorenews N times and has an expiration date of Start + (N + 1)*Duration.

Then:

1) autorenewal is shut off for whatever reason (receipt has no cancellation date). The expiration date is Start+(N+1)*Duration. The supscription has lapsed if the date is later than Start+(N+1)*Duration but the user is entitled to your content that was sent out before Start+(N+1)*Duration (e.g. Great Magazine issue date Start+(N + 1/2)*Duration)

or

2) User demands a refund and Apple refunds the last purchase (receipt has cancellation date). This will be done some time after Start+N*Duration - hence they need a refund. The expiration date is Start+N*Duration. The subscription has lapsed since the date is later than Start+N*Duration and the user is only entitled to your content that was sent out before Start+N*Duration (e.g. they are not entitled to get Great Magazine issue date Start+(N + 1/2)*Duration even if they already got it!)


The above is also true if N=0 (the subscription never autorenewed and was cancelled after the initial purchase).

Thank you So much flipabit and PBK,


It helped us a lot 😀.


There's thing that trouble us which is the connection between our Application Server and also Itune.

So basically was because of User able to re-subscribe anytime through Itune without going through Ipad App.

The problem arise when a user want to delete their account from our Web Application. So we are thinking is there a way for us to remove the ability for that user him/her self to re-subscribe from the "Manage Subscription" Interface?


Thanks again 😀

I don't think you can prevent them from altering their subscription status (turn it on or turn it off) through that page.

Thanks for the info PBK,


😀