I came up with this question when I see some stores advertising customers to download their apps, then sign in to get a voucher, but if the customer delete and reinstall the app, they won't get the voucher again.
I know before iOS10.3, developer can store the device info to a keychain, but according to this answer, apple changed this rule, so the keychain is not persistent anymore. Also, I don't think apple will allow app has access to the device id? Now, what are some ways the developer can identify the user had downloaded the app on the same device before?