Уникальный идентификатор ios в установках

Нам нужно однозначно идентифицировать устройство, и оно должно быть одинаковым для всех установок (переустановить). До сих пор мы используем идентификатор, хранящийся в keychain, поэтому он сохраняется на всех установках. Теперь с 10.3 бетами цепочка ключей автоматически удаляется при удалении приложения. Ссылка: https://forums.developer.apple.com/thread/72271

Можно ли использовать AdIdentifier как уникальный идентификатор. У нас есть реклама, и мы в данный момент используем ее для того же самого.

Ответ 1

Вы имеете в виду AdIdentifier как идентификатор рекламы, иначе IDFA? https://developer.apple.com/reference/adsupport/asidentifiermanager/1614151-advertisingidentifier

Это значение можно легко заменить держателем устройства из приложения настроек. А также это значение равно нулю, когда пользователь имеет ограниченное отслеживание объявлений.

Пришла в голову идея, что использование Cookie в веб-браузере (например, проверка cookie при первом запуске приложения и сохранение уникальной строки, если она не существует), но она также может быть изменена пользователями.

В конце концов, я понятия не имею, как полностью идентифицировать уникального пользователя.

Ответ 2

Кажется, что это обходное решение. На самом деле это упоминалось в форуме, на котором вы ссылались.

Предоставив элемент keychain доступным для других приложений, вы можете убедиться, что он не будет удален, когда ваше приложение будет удалено.

Чтобы сделать это, вы можете добавить элемент в группу доступа kSecAttrAccessGroupToken на iOS 10. См. https://gist.github.com/Raztor0/34ad0e23a410c33526c9fa1b6e8d281c

Если вы установите группу доступа в эту хорошо известную группу, ваш элемент keychain будет доступен для чтения всеми установленными приложениями:

Каждое приложение имеет доступ к этой группе доступа, поэтому нет необходимости явно перечислять его в правах на группы ключей для доступа, но приложение должно явно указывать эту группу доступа в запросах на цепочку ключей, чтобы иметь возможность обращаться к элементам из внешних токенов.

Это делает объект непригодным для любых конфиденциальных или секретных данных (например, паролей, имен пользователей и т.д.). Для уникальной идентификации устройств это не имеет значения.