Храните идентификатор 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. Если ваше приложение переустановлено на устройстве, и вы найдете этот идентификатор устройства в связке ключей, то вы сможете идентифицировать устройство.