We are implementing a one-free-trial-per-device rule for an iOS app. Our server uses App Attest to validate the app instance and DeviceCheck’s per-device bits to record that the device has received its trial.
We grant the trial only after the server can confirm that the DeviceCheck bit was successfully stored. The unresolved case is when our server sends an update request to Apple, but the connection times out or closes before receiving a response. Apple may have accepted the write even though our server does not know the outcome.
What is Apple’s recommended recovery procedure for this situation?
Specifically:
After an uncertain update response, can the server query the device’s bits to authoritatively determine whether the update succeeded?
Does DeviceCheck provide read-after-write consistency for this query?
If the queried bit is still unset, is it safe and supported to retry the update using the same desired bit values?
Are repeated updates that set the bits to their existing values idempotent?
Which response, if any, should be treated as confirmation that the write is durable before granting the trial?
Our current design fails closed: it does not grant the trial when the write outcome is uncertain. We want to avoid both granting multiple trials and permanently denying an eligible user because of a transient network failure.
0
0
208