すべてのiOSバージョンをサポートする必要がある一意の識別子を取得したいのですが。ご存知のように、AppleはUDIDメソッドで非推奨になっているため、wifi-macアドレスを使用して一意のIDを生成する可能性があります。しかしAppleはiOS7バージョンのwifimacアドレス。したがって、私の要件は、すべてのiOSバージョンで機能する新しい一意のコードを生成することです。よろしくお願いします。
注:ユーザーがデバイスを再起動したり、アプリケーションを再インストールしたりした後は、UDIDを変更しないでください。
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;
}
これで、デバイス識別子が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バージョンで動作します。