web-dev-qa-db-ja.com

すべてのiOSバージョンで機能する一意の識別子を生成するにはどうすればよいですか?

すべてのiOSバージョンをサポートする必要がある一意の識別子を取得したいのですが。ご存知のように、AppleはUDIDメソッドで非推奨になっているため、wifi-macアドレスを使用して一意のIDを生成する可能性があります。しかしAppleはiOS7バージョンのwifimacアドレス。したがって、私の要件は、すべてのiOSバージョンで機能する新しい一意のコードを生成することです。よろしくお願いします。

注:ユーザーがデバイスを再起動したり、アプリケーションを再インストールしたりした後は、UDIDを変更しないでください。

12
Ganesh

iOS 4.3以降をサポートする一意の識別子のみに基づいて動作していたアプリケーションを更新していました。つまり、

1)[UIDevice currentDevice].uniqueIdentifier;が使用できなくなったため、使用できませんでした

2)[UIDevice currentDevice].identifierForVendor.UUIDStringはiOS6.0以降でのみ使用可能であり、iOSの下位バージョンでは使用できなかったため、使用できませんでした。

3)iOS-7では許可されていなかったため、Macアドレスはオプションではありませんでした

4) OpenUDID非推奨 しばらく前であり、iOS-6でも問題がありました。

5)iOS-5以下では広告IDも利用できませんでした

最後にこれは私がしたことでした

a)プロジェクトに SFHFKeychainUtils を追加しました

b)生成されたCFUUIDキー文字列

 CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
    udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));

c)それをKey Chain Utilsに保存しました。そうしないと、新しいUnique Each Timeが生成されます。

最終コード

+ (NSString *)GetDeviceID {
    NSString *udidString;
   udidString = [self objectForKey:@"deviceID"];
    if(!udidString)
    {
    CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
    udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
    CFRelease(cfuuid);
        [self setObject:udidString forKey:@"deviceID"];
    }
    return udidString;
}

+(void) setObject:(NSString*) object forKey:(NSString*) key
{
    NSString *objectString = object;
    NSError *error = nil;
    [SFHFKeychainUtils storeUsername:key
                         andPassword:objectString
                      forServiceName:@"LIB"
                      updateExisting:YES
                               error:&error];

    if(error)
        NSLog(@"%@", [error localizedDescription]);
}

+(NSString*) objectForKey:(NSString*) key
{
    NSError *error = nil;
    NSString *object = [SFHFKeychainUtils getPasswordForUsername:key
                                                  andServiceName:@"LIB"
                                                           error:&error];
    if(error)
        NSLog(@"%@", [error localizedDescription]);

    return object;
}

enter image description here

詳細はこちら

40
Quamber Ali

これで、デバイス識別子がUUIDに変更されます。次のコードを使用してUUIDを取得できます。

- (NSString *)getUUID
{
    NSString *UUID = [[NSUserDefaults standardUserDefaults] objectForKey:@"uniqueID"];
    if (!UUID) {
        CFUUIDRef theUUID = CFUUIDCreate(NULL);
        CFStringRef string = CFUUIDCreateString(NULL, theUUID);
        CFRelease(theUUID);
        UUID = [(__bridge NSString*)string stringByReplacingOccurrencesOfString:@"-"withString:@""];
        [[NSUserDefaults standardUserDefaults] setValue:UUID forKey:@"uniqueID"];
    }
    return UUID;
}

すべてのiOSバージョンで動作します。

1
Bond