@ex3xeng

Как получить DeivceID (objective-c — IOS)?

Доброго времени суток! Подскажите как получить уникальный DeviceID что бы после перезапуска приложения получался один и тот же.

Есть код найденный в интернете [[[UIDevice currentDevice] identifierForVendor] UUIDString]; по сути он и генерирует DeviceID, но вот не здача у меня на рабочем компьютере и у моего знакомого в эмуляторе все отлтично, он постоянно генерирует один и тот же код, а вот на моем домашнем компьютере он каждый раз генерирует новую строку! как так то? что я намутил?

Сегодня снес систему OS X переустановил полностью, установил последний xcode и все равно та же самая беда, в чем может быть проблема?
  • Вопрос задан
  • 976 просмотров
Решения вопроса 2
ManWithBear
@ManWithBear
Swift Adept, Prague
Нельзя получить уникальный идентификатор для устройства никаким способом. Был способ раньше, но Apple его закрыл.
То что вы нашли, это идентификатор для рекламодателей. Его можно использовать только, если в вашем приложении есть реклама. В противном случае вы не пройдете модерацию в App Store. И даже если есть реклама, там есть какие-то ограничения.

Так что нужно делать что-то своё.

UPD. Как вариант использовать NSUUID и сохранять его в keychain, он переживет удаление приложения. Но это не документированно, и возможно в будущем будет исправлено.
Ответ написан
@sb_user
Единственный вариант сгенерировать свой идентификатор и сохранить его в keychain или NSUserDefault или CoreDate или любой другой вариант
if let uuidData = self.load(valueIdentifier){
            if let uuid = NSString(data: uuidData, encoding: NSUTF8StringEncoding){
                return uuid as String
            }
        }
        
        if let UUID:String = CFUUIDCreateString(nil, CFUUIDCreate(nil)) as String{
            var NS_UUID:NSString = NSString(string: UUID).lowercaseString
            NS_UUID = NS_UUID.stringByReplacingOccurrencesOfString("-", withString: "")

            if let data = NS_UUID.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false){
                self.save(valueIdentifier, data: data)
            }
            return NS_UUID as String
        }

где load - это восстановление ранее сгенерированного идентификатора,
save - сохранение идентификатора
простите за Swift, но я думаю вы его переведете =)
Также надо понимать что идентификатор изменится если приложение удалить и поставить заново
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы