To begin with, you have to differentiate and define opt-out users and app uninstalls. On one hand, an opt-out user is a user who disables notifications. On the other hand, an app uninstall is a user who uninstalled the app.
Finding your opt-out users
You can track your opt-out users here:
Analytics > Reach tab
💡 Here the opt-outs correspond to the people who are not opt-ins anymore: we cumulate the uninstalls and the people who unsubscribed from the notifications.
Finding your app uninstalls
Here are the two spots where you can track your app uninstalls :
1 - Analytics > Audience tab
2 - Push > Campaign statistics > Undelivered
In this example we report that 694 users, who were known as opt-in, did not receive the push because they uninstalled the application.
How it works?
Batch can only have information about what's going on in the app. When a user installs and opens the app, we receive a token from Apple that allows us to communicate with them.
If the user opt-out from the phone settings, nothing changes on our side. Apple does not notify us in real time. We will only know the real state of activation of the push when the user reopens the app or when we try to send a push to this token, thanks to Apple's feedback. Therefore the Batch database is potentially always "out of synchronisation" with reality from the opt-out point of view.
Likewise, we do not know in time when an opt-out user reactivates push notifications.
We always target opt-in + opt-out tokens: it allows us to update the state of the tokens, clean the database and recover the people who would have reactivated the notifications. An opt-out person will never receive the notification, Apple blocks it.
On Android, users are opt-in by default to push notifications.
The number of opt-out users corresponds to the people who have disabled notifications from the app preferences. The Batch SDK cannot simply detect an opt-out from phone settings because, unlike iOS, an app can offer opt-in categories called "channels". That's why it's difficult to put a general true / false value before a multiple-choice opt-out logic.
🚧 Unlike opt-outs, we receive by return loop the uninstalls that took place between the sending of the last campaign and the campaign of the day. This loop occurs only once a campaign is being sent. That's why you'll see uninstalls only days where a push is made (as in the picture above).