Как сгенерировать уникальный идентификатор устройства для iPhone / iPad с помощью Objective-c



Я хотел узнать, что как сгенерировать уникальный идентификатор устройства для iPhone / iPad с помощью Objective-c



Таким образом, как только приложение установлено на устройстве, мы должны отслеживать, что deviceID





  • Я искал, чтобы получить IMEI iPhone / iPad , но это не разрешено в objective-c.



  • Затем я искал, чтобы сгенерировать UDID iPhone / iPad, но он генерирует для разных ID каждый раз, когда я запускал его на симуляторе .


622   6  

6 ответов:

Да, UDID устарел; мы не можем получить UDID из-за конфиденциальности пользователя. Apple не позволяет получить какие-либо идентификаторы, которые однозначно идентифицируют устройство, такие как IMEI, MAC-адрес, UDID и т. д.

UUID - это лучший способ идти на данный момент. Но это будет уникально для каждого поставщика. Вы не уверены, что он будет уникальным каждый раз, когда вы получаете строку UUID. Лучше всего хранить строку UUID в связке ключей телефона и извлеките его, когда это необходимо, с уловом. При заводской перезагрузке телефона элементы брелка будут удалены. Это ограничение следует иметь в виду.


ОБНОВЛЕНИЕ-В IOS 10.3 БЕТА-ВЕРСИИ:

Похоже, что Apple внесла некоторые изменения в то, как Keychain работает в iOS 10.3+. Элементы связки ключей, хранящиеся в связке ключей, будутудалены , когда все приложения от конкретного поставщика будут удалены. По данным Apple, резиденция секретной информации АН приложение даже после того, как приложение исчезло с устройства, может привести к угрозам безопасности, поэтому они решили запретить этот вид поведения.

Разработчики, полагающиеся на Keychain storage, даже после удаления своих приложений могут использовать этотобходной путь , чтобы продолжить работу с предполагаемой функциональностью. Согласно этому обходному пути, любое приложение может получить доступ к информации, хранящейся в этой конкретной группе доступа Keychain, поэтому рекомендуется добавить дополнительный уровень шифрования к вашим данным. защитите его с еще большей безопасностью, хотя keychain шифрует элементы по умолчанию.


ОБНОВЛЕНИЕ-IOS 10.3.3 (СТАБИЛЬНЫЙ): Похоже, что удаление элементов связки ключей было ошибкой в ранних бета-версиях iOS 10.3.3 и было исправлено позже в стабильном выпуске. Это могло быть вызвано во время беты, так как во время этой фазы могут происходить странные вещи. Это не должно быть проблемой, чтобы использовать брелок в дальнейшем.

Вы можете использовать UUID (универсальная идентификация пользователя). Следующая ссылка содержит документацию apple

Https://developer.apple.com/reference/uikit/uidevice/1620059-identifierforvendor

Https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#//apple_ref/doc/uid/TP40013162-SW1

Вы можете использовать этот код для UUID:

/ / Цель-С

NSString * string =  [[[UIDevice currentDevice] identifierForVendor] UUIDString];

/ / Swift

let deviceID = UIDevice.currentDevice().identifierForVendor?.UUIDString 

/ / Swift 3

let deviceID = UIDevice.current.identifierForVendor?.uuidString

Используйте приведенный ниже код, чтобы получить UDID для устройства iOS Используйте KeychainItemWrapper класс скачать с URL KeychainItemWrap

NSString *uuid;
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"AC_APP_UUID" accessGroup:nil];
NSString *keychainUUID = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
NSString *appVersion = [NSString stringWithFormat:@"%@",@"1.0"];
[keychain setObject:appVersion forKey:(__bridge id)(kSecAttrDescription)];
if (keychainUUID==nil||[keychainUUID isKindOfClass:[NSNull class]]||keychainUUID.length==0) {
    uuid = [[NSUUID UUID] UUIDString];
    [keychain setObject:uuid forKey:(__bridge id)(kSecAttrAccount)];
}else{
    uuid = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
}

Вы не можете взять IMEI и номер телефона мобильного пользователя, Apple ограничена, чтобы получить эти uniqueID.

Вы должны хранить UDID в связке ключей. для этого вам нужно скачать класс keychainwrapper и сохранить UDID, сгенерированный указанным выше кодом:

   UIDevice *device = [[UIDevice alloc]init]; 
   NSString *idForVend = [NSString stringWithFormat:@"%@", [device identifierForVendor]]; 
   NSLog(@"Identifier For Vendor : %@",idForVend);

Перейдите по этой ссылке, это наверняка решит вашу проблему: https://stackoverflow.com/questions/16459879/how-to-store-a-string-in-keychain-ios , iOS? Если вы используете это, если вы удалите приложение и установите его снова, оно останется прежним DeviceID.

#import <AdSupport/AdSupport.h>

NSString* sClientID = [[[ASIdentifierManager sharedManager]advertisingIdentifier] UUIDString];

Лучший UUID , потому что:

  1. он никогда не изменится (*даже если приложение будет удалено)
  2. новости.

Решение таково:

Вы можете сделать это с помощью DeviceToken. DeviceToken являются uniq для всех мобильных устройств.

Код здесь:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
    }
    return yes;

}


- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{

   NSString *AppDeviceToken=[[NSString alloc] initWithFormat:@"%@",deviceToken];
    //NSLog(@"My token is: %@", self.AppDeviceToken);

   AppDeviceToken = [self.AppDeviceToken stringByReplacingOccurrencesOfString:@" " withString:@""];
   AppDeviceToken = [self.AppDeviceToken stringByReplacingOccurrencesOfString:@"<" withString:@""];
   AppDeviceToken = [self.AppDeviceToken stringByReplacingOccurrencesOfString:@">" withString:@""];

    NSLog(@"%@'s Device Token is : %@",[[UIDevice currentDevice] name],AppDeviceToken);
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

Маркер устройства-uniq для всех устройств.

Comments

    Ничего не найдено.