Есть ли альтернатива для UDID. Мое приложение не будет в App Store, поскольку я использую корпоративное распространение. Так что есть замена. Я привязал рекламный идентификатор, открыл udid, UIID и защитил UDID. Но если телефон reset, тогда я получу новый UDID. Любая помощь будет оценена по достоинству.
Замена UDID в IOS7
Ответ 1
Попробуйте все возможные замены. Рекламный идентификатор - лучший способ пойти. Он остается таким же даже после телефона reset, когда я тестировал. Если пользователь отключит его в настройках, мы получим нулевое значение. За исключением этой заминки, это лучшая замена до сих пор. Будет обновлен, если я найду любую другую лучшую замену.
Ответ 2
Для выше 6.0 iOS вы можете использовать identifierForVendor
Or CFUUIDRef
.
-(NSString*)uniqID
{
NSString* uniqueIdentifier = nil;
if( [UIDevice instancesRespondToSelector:@selector(identifierForVendor)] ) {
// iOS 6+
uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// before iOS 6, so just generate an identifier and store it
uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identifierForVendor"];
if( !uniqueIdentifier ) {
CFUUIDRef uuid = CFUUIDCreate(NULL);
uniqueIdentifier = ( NSString*)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
[[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"];
}
}
return uniqueIdentifier;
}//
UPDATE
Как Leon Lucardie
комментарий, он прав
identifierForVendor изменится после удаления/переустановки приложения. См. Здесь Значение в этом свойстве остается неизменным, пока приложение (или другое приложение от того же поставщика) установлено на устройстве iOS. Значение изменяется, когда пользователь удаляет все приложения этих поставщиков с устройства и затем переустанавливает один или несколько из них.
Ответ 3
Вам нужно создать идентификатор поставщика, а затем сохранить его с помощью keychain и вернуть его, как только вы reset используете свой телефон с использованием даты времени
проверьте эту ссылку UUID и UDID для iOS7
Ответ 4
Просто, просто используйте этот код:
-(NSString *)getUID{
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
// This is will run if it is iOS6 and above
return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
} else {
// This is will run before iOS6 and you can use openUDID or other
// method to generate an identifier
return [OpenUDID value];
}
}
Как вы можете понять, если вы планируете поддерживать iOS 5, тогда вы должны использовать OpenUDID (Apple ограничивает чтение UDID даже на iOS 5). С некоторыми ответами здесь вы просто получите отказ от Apple (мой код был одобрен в нескольких моих приложениях).
Обратите внимание, что идентификаторForVendor изменится, если ваш пользователь удалит приложение (или все приложения-поставщики, если их несколько) и переустановит.
Ответ 5
Я использую токен комбинации APNS и vendorId. Оба проверяются для проверки идентификации сотового телефона, и я обновляю их соответственно на мобильном телефоне и на сервере, когда один из них изменится.
По-прежнему возможно, что оба изменения, когда приложение будет удалено и/или reset и сохранены в течение нескольких месяцев, будут изменены оба значения.
Это приведет к тому, что в следующий раз, когда сотовый телефон установит приложение, он будет идентифицирован как новый.
Дополнительно к этому я запускаю процесс на сервере, который помечает как удаленное любое устройство, которое не подключалось к серверу в течение двух месяцев.
В этом случае требуется аутентификация пользователя, а мобильный телефон снова добавляется в пул клиентов.
У меня есть только одно приложение еще, но как только у меня есть второй, я мог бы включить рекламу.
Ответ 6
Эти сообщения в блоге от Ole должны быть полезны:
iOS 5: http://oleb.net/blog/2011/09/how-to-replace-the-udid/ iOS 6+: http://oleb.net/blog/2012/09/udid-apis-in-ios-6/
Ответ 7
Вы можете использовать после ios 6+ с версией Swift 2.2.
var uniqueIdentifier: NSString!
uniqueIdentifier = UIDevice.currentDevice().identifierForVendor?.UUIDString