Храните идентификатор UIDeviceForVendor в рисках отклонения цепочки для ключей

Я должен быть в состоянии идентифицировать устройство iOS через деинсталляции / переустановки. Для этого я планирую хранить identifierForVendor в цепочке для ключей сначала установите, и восстановите это на следующих установках. Есть ли риск быть отклоненным из AppStore при этом?

Я видел несколько вопросов по этому поводу, поэтому я думаю, что это будет разрешено, но в Лицензионном соглашении на Программу разработчика указано, что

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

Я также мог бы использовать NSUUID вместо этого, это будет безопаснее?

Изменить: добавить контекст для ответов, предлагающих ввести логин.

Мое приложение уже имеет систему идентификации (с логином). Это позволяет пользователю подключаться к своей учетной записи, и он должен иметь возможность видеть список устройств, связанных (то есть с которых он в какой-то момент подключился) с его учетной записью, чтобы отслеживать или отсоединять их. Проблема в том, что identifierForVendor изменяется после удаления / переустановки приложения, оставляя "призрачное" устройство в списке пользователя. Сохранение и извлечение позволит переустановить приложение, которое не будет рассматриваться как новое устройство. Он будет использоваться только для этого, а не для рекламы или отслеживания каким-либо образом.

2 ответа

Решение

TL;DR. Хранение UUID в связке ключей телефона не приведет к отклонению вашего приложения. Так что не волнуйся.

Как мы знаем, UUID, который вы пытаетесь использовать, НЕ является постоянным идентификатором, и его хранение не нарушает указанный вами срок лицензирования. Apple не одобряет UDID, MAC- адреса, номера IMEI и т. Д., Чтобы разработчики не могли отслеживать / спамить пользователей на основе их уникальных идентификаторов. Это проблема конфиденциальности. Поскольку UUID является временным идентификатором, мы можем хранить их и использовать позже, что не причинит вреда пользователю.

Я цитирую это по ссылке из ресурсов Apple здесь: Использование identifierForVendor

Значение в этом свойстве остается неизменным, пока приложение (или другое приложение того же производителя) установлено на устройстве iOS. Значение изменяется, когда пользователь удаляет все приложения этого поставщика с устройства, а затем переустанавливает одно или несколько из них. Это значение также может изменяться при установке тестовых сборок с использованием XCode или при установке приложения на устройство с использованием специального распространения. Поэтому, если ваше приложение хранит значение этого свойства где-либо, вы должны корректно обрабатывать ситуации, когда идентификатор изменяется.

----- **** ОБНОВЛЕНИЕ В IOS 10.3:****-----

Похоже, что Apple внесла некоторые изменения в работу Keychain в iOS 10.3+. Элементы цепочки для ключей, хранящиеся в цепочке для ключей, будут удалены при удалении всех приложений определенного поставщика. Согласно Apple, хранение конфиденциальной информации приложения даже после того, как приложение исчезло с устройства, может привести к угрозам безопасности, поэтому они решили запретить такое поведение.

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

Вы можете сгенерировать идентификатор устройства (-> аналогичный UUID) на сервере и сохранить его в связке ключей iOS. Если ваше приложение переустановлено на устройстве, и вы найдете этот идентификатор устройства в связке ключей, то вы сможете идентифицировать устройство.

Другие вопросы по тегам