Подтвердить что ты не робот

Замена UDID в IOS7

Есть ли альтернатива для UDID. Мое приложение не будет в App Store, поскольку я использую корпоративное распространение. Так что есть замена. Я привязал рекламный идентификатор, открыл udid, UIID и защитил UDID. Но если телефон reset, тогда я получу новый UDID. Любая помощь будет оценена по достоинству.

4b9b3361

Ответ 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 и сохранены в течение нескольких месяцев, будут изменены оба значения.

Это приведет к тому, что в следующий раз, когда сотовый телефон установит приложение, он будет идентифицирован как новый.

Дополнительно к этому я запускаю процесс на сервере, который помечает как удаленное любое устройство, которое не подключалось к серверу в течение двух месяцев.

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

У меня есть только одно приложение еще, но как только у меня есть второй, я мог бы включить рекламу.

Ответ 7

Вы можете использовать после ios 6+ с версией Swift 2.2.

var uniqueIdentifier: NSString!
uniqueIdentifier = UIDevice.currentDevice().identifierForVendor?.UUIDString