问题
Im using apns with http2 protocol for sending pushnotifications, the code i use is similar to this post: https://stackoverflow.com/a/34831873/1546652
When my app is correctly installed the apns http2 api works ok while sending messages, my reponse is something of the style : {"response":"","httpcode":200}
The problem is that when i uninstall the app and send a pushnotification to the invalid registrationId i dont receive status 410 nor the response "reason:Unregistered" and still receive a true response with status 200.
How can i receive 410 status and correspondig response when unistall the app in apns http2?
回答1:
This technical note might be of help, basically
iOS will keep one socket connection per APNS environment (Production/ Sandbox) and when you delete the app from iOS, if its a last app for a given environment it kills that socket connection as well, which causes the deletion event to be dropped for that last app.
This generally happens with development apps.
The solution is to keep a dummy app installed on a device which registers for APNs and is signed with developer identities, now when you delete your real app from device during development it will keep the connection to APNS open resulting in app deletion being reported to APNS.
Also, In my testing I have experienced delays around 30-60 mins before an app deletion is reflected in APNS Response.
回答2:
Here is my 410 status experience on APNS prod service; After removal of distribution application on device, I could get 410 response a few time, but then, after spending too much time on testing of APNS Http/2 API, I noticed that It returns always success(http 200) response for the previous device tokens which belongs removed application, even after 2–3 days.
I found these two lines of log in device after adding apns logging profile:
APSCourier: Received message for recently removed topic ‘com.xxx.xxx.xxx’
APSCourier: Sending acknowledgement message
I think, It is about asynchronous flow of receiving notification of removed topic on device and sending its acknowledgement message to the back APNS from device. Somehow APNS does not take action about these acknowledgements.
By considering the current state of APNS behaviour, using new APNS Notification Service to having it as a part of uninstallation tracking process is not a right approach for now.
Instead of APNS, you can execute background task to ping your server for letting you to detect about uninstallation status.
And want to share a few link from apple developer forums, discussing parallel topics:
APNs token still valid after app uninstalled
Older APNs device tokens do reach the device
Old APNs tokens not invalidating?
How do APNS HTTP/2 and APNS HTTP/1.1 Work together?
When does APNS report an uninstall?
回答3:
You should also try the old feedback service, it still works.
NWPusher is a quick way to check.
来源:https://stackoverflow.com/questions/39290613/apns-http2-api-not-returning-status-410-after-uninstalling-app