UIDevice uniqueIdentifier устарел - что теперь делать?

Этот запрос может быть использован в PHP-коде.

У меня есть столбец идентификатора в этой таблице, поэтому мне нужно проверить дублирование для всех столбцов, кроме этого столбца ID:

#need to change values
SET @goodsType = 1, @sybType=5, @deviceId = asdf12345SDFasdf2345;    


INSERT INTO `devices` (`goodsTypeId`, `goodsId`, `deviceId`) #need to change tablename and columnsnames
SELECT * FROM (SELECT @goodsType, @sybType, @deviceId) AS tmp
WHERE NOT EXISTS (
    SELECT 'goodsTypeId' FROM `devices` #need to change tablename and columns names
    WHERE `goodsTypeId` = @goodsType
        AND `goodsId` = @sybType
        AND `deviceId` = @deviceId
) LIMIT 1;

, и теперь новый элемент будет добавлен только в том случае, если не существует строки со значениями, настроенными в строке SET

494
задан Cœur 21 November 2018 в 03:51
поделиться

3 ответа

Я уверен, что Apple раздражала многих людей этим изменением. Я разрабатываю приложение для бухгалтерии для iOS и имею онлайн-сервис для синхронизации изменений, сделанных на разных устройствах. Служба поддерживает базу данных всех устройств и изменений, которые необходимо распространить на них. Поэтому важно знать, какие устройства какие. Я слежу за устройствами, использующими UIDevice uniqueIdentifier, и за то, что оно того стоит, вот мои мысли.

  • Создать UUID и сохранить в пользовательских настройках по умолчанию? Ничего хорошего, потому что это не сохраняется, когда пользователь удаляет приложение. Если они позже установятся снова, онлайн-сервис не должен создавать новую запись устройства, что приведет к потере ресурсов на сервере и выдаче списка устройств, содержащих одно и то же, два или более раз. Пользователи увидят более одного «iPhone Боба» в списке, если они переустановят приложение.

  • Создать UUID и сохранить в цепочке для ключей? Это был мой план, поскольку он сохраняется даже при удалении приложения. Но при восстановлении резервной копии iTunes на новое устройство iOS цепочка для ключей передается, если резервная копия зашифрована. Это может привести к тому, что два устройства будут содержать один и тот же идентификатор устройства, если и старое, и новое устройства находятся в эксплуатации. Они должны быть указаны как два устройства в онлайн-сервисе, даже если имя устройства совпадает.

  • Сгенерировать хеш MAC-адрес и идентификатор пакета? Это выглядит как лучшее решение для того, что мне нужно. Хэшируя с идентификатором пакета, сгенерированный идентификатор устройства не позволяет отслеживать устройство между приложениями, и я получаю уникальный идентификатор для комбинации приложение + устройство.

Интересно отметить, что собственная документация Apple относится к проверке Mac квитанций App Store путем вычисления хэша системного MAC-адреса плюс идентификатор комплекта и версия. Так что это кажется допустимым политикой, независимо от того, проходит ли это через проверку приложения, я пока не знаю.

11
ответ дан Mathew Waters 21 November 2018 в 03:51
поделиться

Следующий код помогает получить UDID:

        udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        NSLog(@"UDID : %@", udid);
3
ответ дан santify 21 November 2018 в 03:51
поделиться

UIDevice identifierForVendor представленный в iOS 6 будет работать для ваших целей.

identifierForVendor представляет собой буквенно-цифровую строку, которая однозначно идентифицирует устройство для поставщика приложения. (только для чтения)

@property(nonatomic, readonly, retain) NSUUID *identifierForVendor

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

Доступно в iOS 6.0 и более поздних версиях и объявлено в UIDevice.h

Для iOS 5 см. Эту ссылку UIDevice-with-UniqueIdentifier-для-iOS-5

4
ответ дан D_D 21 November 2018 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: