statusUpdateNotification not getting renewal notification type

We have setup the Status Update Notifications for server to server notifcations for auto renew products. We are getting the INITIAL_BUY and DID_CHANGE_RENEWAL_PREFERENCE notification types from sandbox, but we are not getting the RENEWAL notifications.


Is there something we need to do to get those notificaiton types?

I observe the same in production environment.

If you read the description of the RENEWAL event, you will note - "Automatic renewal was successful for an expired subscription. Check Subscription Expiration Date to determine the next renewal date and time." In general, iTunes will attempt to charge the user account a day before an auto-renewing subscription is scheduled to expire. If the renewal is successful, there is no server-to server notification because the auto-renewing subscription did not enter into an expired state. However, in the few cases that iTunes is unable to renew the subscription (generally there was a connection problem with the credit card server) and the auto-renewing subscription is not renewed before the expiration_date passes, the auto-renewing subscription is technically considered “expired”. However, iTunes will still continue to attempt to renew the subscription. It iTunes is successful, then the “RENEWAL” event is sent. for this reason, the advice is presented - “Check Subscription Expiration Date to determine the next renewal date and time.”


To verify whether the auto-renewing subscription In-App Purchase is current, validate the appStoreReceipt with the verifyReceipt server. Assuming that there is an auto-renewing subscription item in the in_app array, then review the latest_receipt_info records and find the subscription record which has an expires_date later than the current date, one without the cancellation_date field set.


rich kubota - rkubota@apple.com

developer technical support CoreOS/Hardware/MFI

Hi Rich,


We are having a similar issue with rollovers around not knowing if someone has auto-renewed or if they have elected to cancel future rollovers through their subscription settings.


From your notes, it sounds like RENEWAL is not the one to be looking at. CANCEL is noted as only applying for when Apple Customer Support cancel the subscription and we have not received any DID_CHANGE_RENEWAL_PREF notifications either.


What notification type should be referred to, to flag if a user has auto-renewed / elected not to rollover.

Thanks,
Ben

Ben,


There is no status notification to determine that the renewal has re-occurred normally. As mentioned previously, it's best to validate the appStoreReceipt starting a day or 2 prior to the expires_date for the current subscription. in the validated JSON payload, you can review the "pending_renewal_info" section and look for the "auto_renew_status" to get an idea as to whether an attempt will be made to renew the subscription. To determine whether the renewal actually occurred, you will need to validate the receipt on the expires_date and check if there is a more recent entry in the "latest_receipt_info" section.


rich kubota - rkubota@apple.com

developer technical support CoreOS/Hardware/MFI

For us, renewal is the most important information to get via server to server as we already know the initial buy via our app processing the receipt at purchase. Is this something that Apple is considering enabling in the future?


I do understand per your above reply that we can validate the appStoreReceipt, but this seems like the best use of statusUpdateNotification.


Thanks!

I suspect their is broad support for implementing a "renewal" status notification which is sent on every renewal of an auto-renewing subscription. I suggest that you submit an enhancement request for iTunesConnect to implement such support. You can submit the enhancement request using the Apple Developer Bug Report web page - http://bugreport.apple.com.


rich kubota - rkubota@apple.com

developer technical support CoreOS/Hardware/MFI

Why there are two orders in the latest_receipts_info and in_app collection except that the transaction_id field is different and the other fields are identical. Personally think that these two orders should refer to the same transaction, because the value of expires_date is exactly the same.

"in_app":[
            {
                "quantity":"1",
                "product_id":"9108",
                "transaction_id":"350000592451801",
                "original_transaction_id":"350000562336191",
                "purchase_date":"2020-02-15 05:11:45 Etc/GMT",
                "purchase_date_ms":"1581743505000",
                "purchase_date_pst":"2020-02-14 21:11:45 America/Los_Angeles",
                "original_purchase_date":"2019-12-22 10:53:12 Etc/GMT",
                "original_purchase_date_ms":"1577011992000",
                "original_purchase_date_pst":"2019-12-22 02:53:12 America/Los_Angeles",
                "expires_date":"2020-03-15 04:11:45 Etc/GMT",
                "expires_date_ms":"1584245505000",
                "expires_date_pst":"2020-03-14 21:11:45 America/Los_Angeles",
                "web_order_line_item_id":"350000213135168",
                "is_trial_period":"false",
                "is_in_intro_offer_period":"false"
            },
],
"latest_receipts_info":[{
            "quantity":"1",
            "product_id":"9108",
            "transaction_id":"350000592451802",
            "original_transaction_id":"350000562336191",
            "purchase_date":"2020-02-15 05:11:45 Etc/GMT",
            "purchase_date_ms":"1581743505000",
            "purchase_date_pst":"2020-02-14 21:11:45 America/Los_Angeles",
            "original_purchase_date":"2019-12-22 10:53:12 Etc/GMT",
            "original_purchase_date_ms":"1577011992000",
            "original_purchase_date_pst":"2019-12-22 02:53:12 America/Los_Angeles",
            "expires_date":"2020-03-15 04:11:45 Etc/GMT",
            "expires_date_ms":"1584245505000",
            "expires_date_pst":"2020-03-14 21:11:45 America/Los_Angeles",
            "web_order_line_item_id":"350000213135168",
            "is_trial_period":"false",
            "is_in_intro_offer_period":"false",
            "subscription_group_identifier":"20449932"
        }
],
"latest_receipt_info":[
        {
            "quantity":"1",
            "product_id":"9110",
            "transaction_id":"190000605094548",
            "original_transaction_id":"190000605094548",
            "purchase_date":"2019-04-16 15:36:42 Etc/GMT",
            "purchase_date_ms":"1555429002000",
            "purchase_date_pst":"2019-04-16 08:36:42 America/Los_Angeles",
            "original_purchase_date":"2019-04-16 15:36:44 Etc/GMT",
            "original_purchase_date_ms":"1555429004000",
            "original_purchase_date_pst":"2019-04-16 08:36:44 America/Los_Angeles",
            "expires_date":"2020-04-16 15:36:42 Etc/GMT",
            "expires_date_ms":"1587051402000",
            "expires_date_pst":"2020-04-16 08:36:42 America/Los_Angeles",
            "web_order_line_item_id":"190000180526337",
            "is_trial_period":"false",
            "is_in_intro_offer_period":"true",
            "subscription_group_identifier":"20449932"
        },
        {
            "quantity":"1",
            "product_id":"9110",
            "transaction_id":"190000762220985",
            "original_transaction_id":"190000605094548",
            "purchase_date":"2020-04-16 15:36:42 Etc/GMT",
            "purchase_date_ms":"1587051402000",
            "purchase_date_pst":"2020-04-16 08:36:42 America/Los_Angeles",
            "original_purchase_date":"2019-04-16 15:36:44 Etc/GMT",
            "original_purchase_date_ms":"1555429004000",
            "original_purchase_date_pst":"2019-04-16 08:36:44 America/Los_Angeles",
            "expires_date":"2021-04-16 15:36:42 Etc/GMT",
            "expires_date_ms":"1618587402000",
            "expires_date_pst":"2021-04-16 08:36:42 America/Los_Angeles",
            "web_order_line_item_id":"190000180526338",
            "is_trial_period":"false",
            "is_in_intro_offer_period":"false",
            "subscription_group_identifier":"20449932"
        }
    ],
statusUpdateNotification not getting renewal notification type
 
 
Q