2012-03-11 24 views
5

Możliwe jest wykrycie identyfikatora urządzenia iOS za pomocą Xcode. Potrzebuję każdej pobranej aplikacji mieć unikalny identyfikator. Myślałem, że generują liczby losowe, ale mogą wygenerować tę samą liczbę więcej niż raz! Ktoś ma pomysł?Utwórz niepowtarzalny identyfikator urządzeń z systemem iOS?

+2

różnych rozwiązań już przewidzianych na SO, spróbuj tego wątek http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now –

Odpowiedz

4

Znalazłem dość prosty sposób to zrobić, oto jak:

Prasa POLECENIE + N i wybierz Cocoa Touch Class.

Nazwij swoją klasę NSString+UUID i naciśnij dalej.

Następnie zastąpić kod w NSString+UUID.h z:

@interface NSString (UUID) 

+ (NSString *)uuid; 

@end 

I NSString+UUID.m z:

@implementation NSString (UUID) 

+ (NSString *)uuid { 
    NSString *uuidString = nil; 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    if (uuid) { 
     uuidString = (NSString *)CFUUIDCreateString(NULL, uuid); 
     CFRelease(uuid); 
    } 
    return [uuidString autorelease]; 
} 

@end 

Teraz, gdy trzeba uzyskać UUID (tj: przechowywać go za pomocą NSUserDefaults kiedy wasz obciążenie aplikacji):

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

    NSString *userIdentifierKey = @"user-identifier" 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    if ([defaults objectForKey:userIdentifierKey] == nil) { 

     NSString *theUUID = [NSString uuid]; 

     [defaults setObject:theUUID forKey:userIdentifierKey]; 
     [defaults synchronize]; 

    } 

    // additional application setup... 

    return YES; 
} 
4

W klasie UIDevice jabłko dostarczyło metodę uniqueIdentifier, ale teraz jest przestarzałe (dla iOS5), w metodzie documentation dowiesz się, jak możesz użyć uniqueIdentifier.

0

spróbować

- (NSString *)getDeviceID 
{ 
    NSString *uuid = [self gettingString:@"uniqueAppId"]; 
    if(uuid==nil || [uuid isEqualToString:@""]) 
    { 
     CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault); 
     if (theUUID) 
     { 
      uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID)); 
      [self savingString:@"uniqueAppId" data:uuid]; 
      [uuid autorelease]; 
      CFRelease(theUUID); 
     } 
    } 
    return uuid; 

// this is depreciated 
// UIDevice *device = [UIDevice currentDevice]; 
// return [device uniqueIdentifier]; 
} 
3

Spróbuj UIDevice-with-UniqueIdentifier-for-iOS-5, używa adres MAC jako unikalny identyfikator urządzenia.

+0

czy wiesz, że adres MAC pozostaje stały przez cały czas Wi-Fi i połączenia komórkowe, czy zmienia się, gdy użytkownik przełącza się z jednego rodzaju sieci na inny? – Crashalot

3

iOS6 zapewnia nowy zamiennik [[[UIDev lód currentDevice] identifierForVendor] UUIDString]

Wartość tej właściwości jest taka sama dla aplikacji, które pochodzą z samego dostawcy działającego na tym samym urządzeniu. Inna wartość jest zwracana dla aplikacji na tym samym urządzeniu, które pochodzą od różnych dostawców, oraz dla aplikacji na różnych urządzeniach względem sprzedawcy.

Patrz: https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIDevice_Class/Reference/UIDevice.html#//apple_ref/doc/uid/TP40006902-CH3-SW49

1

Można utworzyć kategorię UIApplication, UIDevice lub jak preferują tak (przykład ARC)

@interface UIApplication (utilities) 
- (NSString*)getUUID; 
@end 

@implementation UIApplication (utilities) 

- (NSString*)getUUID { 

    NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults]; 

    static NSString *uuid = nil; 

    // try to get the NSUserDefault identifier if exist 
    if (uuid == nil) { 

     uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"]; 
    } 

    // if there is not NSUserDefault identifier generate one and store it 
    if (uuid == nil) { 

     uuid = UUID(); 
     [standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"]; 
     [standardUserDefault synchronize]; 
    } 

    return uuid; 
} 

@end 

UUID() to funkcja ta

NSString* UUID() { 

    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    return (__bridge NSString *)uuidStringRef; 
} 

generuje to unikalny identyfikator przechowywany w pliku NSUserDefault, aby można go było ponownie użyć, gdy aplikacja tego wymaga - Ta identyfikacja r będzie unikalny związany z instalacjami aplikacji, a nie z urządzeniem, ale może być użyty na przykład do śledzenia liczby urządzeń subskrybowanych przez usługę APN itp ...

Po tym można używać go w ten sposób:

NSString *uuid = [[UIApplication sharedApplication] getUUID]; 
0

użyj: [[UIDevice currentDevice] identifierForVendor]

Aby uzyskać więcej informacji, zajrzyj do tego answer

Powiązane problemy