2012-03-11 15 views
5

Xcodeを使用してiOSデバイス識別子を検出することは可能です。私は一意の識別子をダウンロードした各アプリケーションに必要があります。私は乱数を生成すると考えましたが、同じ数を2回以上生成する可能性があります。誰でもアイデアはありますか?iOSデバイスの一意の識別子を作成しますか?

+2

様々なソリューションに見てみる詳細については[[UIDevice currentDevice] identifierForVendor]

、これを試してみてくださいスレッド http://stackoverflow.com/questions/6993325/uidevice-uniqueidentifier-deprecated-what-to-do-now –

答えて

4

私はこれを行うにはかなり簡単な方法を見つけた、ここに方法です。

クラス名をNSString+UUIDと命名し、次にヒットします。その後

、とNSString+UUID.hにコードを置き換える:ときにNSUserDefaultsを使用して、それを保存:あなたはUUID(すなわちを取得する必要がある場合、

@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 

:で

@interface NSString (UUID) 

+ (NSString *)uuid; 

@end 

そしてNSString+UUID.mでアプリが読み込まれます):

-(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

UIDeviceクラスではappleがメソッドuniqueIdentifierを提供しましたが、現在は非推奨(iOS5の場合)のメソッドのdocumentationではuniqueIdentifierの使用方法がわかります。

0

すると、この

- (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

このUIDevice-with-UniqueIdentifier-for-iOS-5を試してみてください、それが一意の識別子として、デバイスのMACアドレスを使用しています。

押しCOMMAND + NCocoa Touch Classを選択:

+0

MACアドレスが一定であるかどうか知っていますかWi-Fi接続やセルラー接続、またはユーザがあるタイプのネットワークから別のタイプのネットワークに切り替えると変化しますか? – Crashalot

3

iOS6では、[[[UIDev氷がcurrentDevice] identifierForVendor] UUIDString]

このプロパティの値は、同じデバイス上で実行されている 同じベンダーから来たアプリケーションについても同様です。さまざまなベンダーのものと同じデバイス上のアプリの場合は 、ベンダーの異なるデバイスの場合は アプリの場合は、異なる値が返されます。

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

1

あなたがのUIApplication、UIDeviceのカテゴリを作成するか、この(ARC例)のようにprefereなどができ

@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()

NSString* UUID() { 

    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    return (__bridge NSString *)uuidStringRef; 
} 
この機能であります

これは、NSUserDefaultに格納された一意の識別子を生成して、アプリケーションが必要とするときに再利用できるようにします。 rはデバイスにインストールされていないアプリケーションに固有のものですが、APNサービスなどを購読しているデバイスの番号を追跡するために使用できます。

あなたはこの方法でそれを使用することができた後:

NSString *uuid = [[UIApplication sharedApplication] getUUID]; 
関連する問題