UDID
とMAC
の代わりにiPhoneデバイスの一意の識別子文字列が必要です。
1。 Get UDID
およびMAC
はAppleによって非推奨になりました。
2。UUID
を使用できますが、アプリを再インストールするか、アプリを削除すると変更されます。
アプリの再インストール後も同じままのデバイスの一意の値が必要ですOR削除OR iOSバージョンをアップグレードします。
できることは、[[UIDevice currentDevice] identifierForVendor]
またはその他の一意の識別子ジェネレーターを使用して一意の識別子を取得することです。その後、KeychainItemWrapper
を使用してその値をキーチェーンに保存して使用する必要があります。キーチェーンに値を保存すると、アプリを削除して再インストールした後でも、値は削除されません。
キーチェーンアクセスのガイドは次のとおりです リンク
試してみてください
[[UIDevice currentDevice] identityForVendor];
IOS6からです。
または、以下を使用してNSUserDefaults
に保存します
[NSProcessInfo processInfo].globallyUniqueString
プロセスのグローバルID。 IDには、ホスト名、プロセスID、およびタイムスタンプが含まれます。これにより、IDがネットワークに対して一意であることが保証されます。
@danypataが言ったように、 この回答 で説明されているようにidentifierForVendorを使用します。
または、代わりに、広告NSUDIDを ここで説明 として使用できる場合があります。
ただし、これらはnilとして返されるか、時間の経過とともに変更される可能性があります。ユーザーは広告主の追跡をオプトアウトできるため、自分の目的でユーザーを追跡するために使用することはお勧めしません。
そもそもなぜ彼らのデバイスを追跡しているのかによると思います。私の態度は、ユーザーの習慣を永遠に追跡する必要はないということです。一般的なユーザーの傾向といくつかのDAU情報を追跡するだけで済みます。だから私は自分のUDIDを作ります-それはアプリのインストールごとに変わります。次のバージョンでは、identifierForVendorを使用し、NILの場合は自分で作成します。
これは私が自分で作る方法です:
// this makes a device id like: UUID = 89CD872F-C9AF-4518-9E6C-A01D35AF091C
// except that I'm going to attach some other attributes to it like the OS version, model type, etc.
// the UUID that is stored in user defaults will be like the one above.. but the device id that gets returned
// from this function and sent to [my online system] will have the extra info at the end of the string.
- (void) createUUID {
// for collecting some data.. let's add some info about the device to the uuid
NSString *thisDeviceID;
NSString *systemVersion = [[UIDevice currentDevice]systemVersion];
NSString *model = [[UIDevice currentDevice]model];
NSString *retinaTag;
if (retina) {
retinaTag = @"Retina";
}
else {
retinaTag = @"";
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id uuid = [defaults objectForKey:@"uniqueID"];
if (uuid)
thisDeviceID = (NSString *)uuid;
else {
CFStringRef cfUuid = CFUUIDCreateString(NULL, CFUUIDCreate(NULL));
thisDeviceID = (__bridge NSString *)cfUuid;
CFRelease(cfUuid);
[defaults setObject:thisDeviceID forKey:@"uniqueID"];
}
//NSLog(@"UUID = %@", thisDeviceID);
MYthisDeviceID = [NSString stringWithFormat:@"%@-%@-%@-%@",thisDeviceID,systemVersion,retinaTag,model];
//NSLog(@"UUID with info = %@", MYthisDeviceID);
}
次に、サーバーに送信される単一の文字列には、UDIDと、デバイスおよびOSに関する仕様の両方が含まれています。ユーザーがアプリを完全に削除して再読み込みするまで、統計にはそのデバイスでの使用状況が表示されます。新しいOSに更新された場合に二重のUDを取得しないようにするには、UDの部分だけにトリミングできます。
Appleは私たちに望んでいないと理解していたので、私はMacアドレスをまったく使用していません。現時点ではそれを説明しているドキュメントは見つかりませんが。
IOS7のアップデート:
私は今、io6とio7で動作するこのコードを使用しています:
NSString *globalDeviceID;
- (void) createUUID
{
NSString *thisDeviceID;
NSString *systemVersion = [[UIDevice currentDevice]systemVersion];
NSString *model = [[UIDevice currentDevice]model];
NSString *retinaTag;
if (retina) {
retinaTag = @"Retina";
}
else {
retinaTag = @"";
}
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
id uuid = [defaults objectForKey:@"deviceID"];
if (uuid)
thisDeviceID = (NSString *)uuid;
else {
if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
thisDeviceID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
}
else
{
CFStringRef cfUuid = CFUUIDCreateString(NULL, CFUUIDCreate(NULL));
thisDeviceID = (__bridge NSString *)cfUuid;
CFRelease(cfUuid);
}
[defaults setObject:thisDeviceID forKey:@"deviceID"];
}
NSLog(@"UUID = %@", thisDeviceID);
globalDeviceID = [NSString stringWithFormat:@"%@-%@-%@-%@",thisDeviceID,systemVersion,retinaTag,model];
NSLog(@"UUID with info = %@", globalDeviceID);
}
OpenUDID をご覧になることをお勧めします。
その下ではMACアドレスを使用していると思いますので、MACアドレスへのアクセスは非推奨であると言って正しければ、おそらくあまり役に立たないでしょうが、Appleアクセスを削除します。MACアドレスには、UDIDの目的でデバイスを識別するだけのその他のアプリケーションがあります。