web-dev-qa-db-ja.com

Objective-cを使用してiPhone / iPadのデバイスの一意のIDを生成する方法

Objective-cを使用してiPhone/iPadのデバイスの一意のIDを生成する方法

アプリケーションがdeviceにインストールされたら、そのdeviceIDを追跡する必要があります

  • IPhone/iPadのIMEIを取得するために検索しましたが、objective-cでは許可されていません。

  • 次に、iPhone/iPadのUDIDを生成するために検索しましたが、シミュレータで起動するたびに異なるIDを生成しています。

8
Poonam K.

はい、[〜#〜] udid [〜#〜]は非推奨です。ユーザーのプライバシー保護のため、UDIDの取得は許可されていません。 Appleでは、IMEI、MACアドレス、UDIDなど、デバイスを一意に識別する識別子を取得できません。 。

[〜#〜] uuid [〜#〜]は現在のところ最善の方法です。しかし、それはベンダーごとに一意です。 [〜#〜] uuid [〜#〜]文字列を取得するたびに一意になるとは限りません。最善の策は、[〜#〜] uuid [〜#〜]文字列を電話のKeychain必要なときにキャッチして取得します。携帯電話を工場出荷時の状態にリセットすると、キーチェーンのアイテムが消去されます。この制限に留意する必要があります。


UPDATE-IN IOS 10.3 BETA'S:

Appleは、キーチェーンの動作方法にいくつかの変更を加えたようですiOS 10.3 +。キーチェーンに保存されたキーチェーン項目特定のベンダーのすべてのアプリがアンインストールされると、deletedになります。Appleによると、アプリの機密情報は、アプリがデバイスから削除されると、セキュリティリスクにつながる可能性があるため、この種の動作を禁止することにしました。

アプリのアンインストール後もキーチェーンストレージに依存している開発者は、この [〜#〜] workaround [〜#〜] を使用して、目的の機能を継続できます。この回避策によれば、どのアプリもその特定のキーチェーンアクセスグループに保存されている情報にアクセスできるため、キーチェーンはデフォルトでアイテムを暗号化しますが、データに暗号化レイヤーを追加することでさらにセキュリティを強化することをお勧めします。


UPDATE-IOS 10.3.3(STABLE):キーチェーン項目の削除はiOS 10.3.3の初期ベータでバグが発生し、安定版リリースで修正されましたが、このフェーズで奇妙なことが起こる可能性があるため、ベータ中に発生した可能性があります。

17
Badhan Ganesh

UUID(Universal User Identification)を使用できます。次のリンクにはApple documentation

https://developer.Apple.com/reference/uikit/uidevice/1620059-identifierforvendor

https://developer.Apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#//Apple_ref/doc/uid/TP40013162-SW1

uUIDに次のコードを使用できます。

// Objective-C

NSString * string =  [[[UIDevice currentDevice] identifierForVendor] UUIDString];

//迅速

let deviceID = UIDevice.currentDevice().identifierForVendor?.UUIDString 

// Swift 3

let deviceID = UIDevice.current.identifierForVendor?.uuidString
9

以下のコードを使用して、iOSデバイスのUDIDを取得しますURLからKeychainItemWrapperクラスのダウンロードを使用します KeychainItemWrap

NSString *uuid;
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"AC_APP_UUID" accessGroup:nil];
NSString *keychainUUID = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
NSString *appVersion = [NSString stringWithFormat:@"%@",@"1.0"];
[keychain setObject:appVersion forKey:(__bridge id)(kSecAttrDescription)];
if (keychainUUID==nil||[keychainUUID isKindOfClass:[NSNull class]]||keychainUUID.length==0) {
    uuid = [[NSUUID UUID] UUIDString];
    [keychain setObject:uuid forKey:(__bridge id)(kSecAttrAccount)];
}else{
    uuid = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
}
5
SM18

2017年以降にここに来る人は誰でも、Appleはこの目的のためにDeviceCheckを実装しています。

https://developer.Apple.com/documentation/devicecheck#overview

DeviceCheckを使用して、この特定のデバイスが特定のアプリをインストールまたは使用したかどうかを確認できます。電話に一意のIDを与えるわけではありませんが、ユーザーがプロモーションを焼き切ったかどうかを確認できます。

1
nelsonenzo