回答:
あなたはこれを使うことができます(Swift 3):
UIDevice.current.identifierForVendor!.uuidString
古いバージョンの場合:
UIDevice.currentDevice().identifierForVendor
または文字列が必要な場合:
UIDevice.currentDevice().identifierForVendor!.UUIDString
ユーザーがアプリをアンインストールした後にデバイスを一意に識別する方法はなくなりました。ドキュメントは言う:
アプリ(または同じベンダーの別のアプリ)がiOSデバイスにインストールされている間、このプロパティの値は変わりません。ユーザーがデバイスからそのベンダーのアプリをすべて削除し、その後それらの1つ以上を再インストールすると、値が変わります。
また、詳細についてはMattt Thompsonによるこの記事を読むこともできます。http:
//nshipster.com/uuid-udid-unique-identifier/
Swift 4.1の更新。以下を使用する必要があります。
UIDevice.current.identifierForVendor?.uuidString
UIDeviceクラスにあるidentifierForVendorパブリックプロパティを使用できます。
let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
print("UUID: \(UUIDValue)")
Swift 3を編集:
UIDevice.current.identifierForVendor!.uuidString
編集を終了
用スウィフト3.X最新のワーキングコード、簡単に使い方;
let deviceID = UIDevice.current.identifierForVendor!.uuidString
print(deviceID)
devicecheck(Swift 4)の Appleドキュメントを使用できます。
func sendEphemeralToken() {
//check if DCDevice is available (iOS 11)
//get the **ephemeral** token
DCDevice.current.generateToken {
(data, error) in
guard let data = data else {
return
}
//send **ephemeral** token to server to
let token = data.base64EncodedString()
//Alamofire.request("https://myServer/deviceToken" ...
}
}
典型的な使用法:
通常、DeviceCheck APIを使用して、新しいユーザーが同じデバイス上の別のユーザー名でオファーをまだ引き換えていないことを確認します。
サーバーアクションに必要なもの:
Santosh Botreの記事の詳細-iOSデバイスの一意の識別子
関連するサーバーは、このトークンをAppleから受け取った認証キーと組み合わせ、その結果を使用してデバイスごとのビットへのアクセスを要求します。
Swift 2.2
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let userDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.objectForKey("ApplicationIdentifier") == nil {
let UUID = NSUUID().UUIDString
userDefaults.setObject(UUID, forKey: "ApplicationIdentifier")
userDefaults.synchronize()
}
return true
}
//Retrieve
print(NSUserDefaults.standardUserDefaults().valueForKey("ApplicationIdentifier")!)
if (UIDevice.current.identifierForVendor?.uuidString) != nil
{
self.lblDeviceIdValue.text = UIDevice.current.identifierForVendor?.uuidString
}
class func uuid(completionHandler: @escaping (String) -> ()) {
if let uuid = UIDevice.current.identifierForVendor?.uuidString {
completionHandler(uuid)
}
else {
// If the value is nil, wait and get the value again later. This happens, for example, after the device has been restarted but before the user has unlocked the device.
// https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor?language=objc
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
uuid(completionHandler: completionHandler)
}
}
}
ユーザーがデバイスからそのベンダーのアプリをすべて削除すると、identifierForVendorの値が変わります。その後の新規インストールでも一意のIDを保持したい場合は、次の関数を使用してみてください
func vendorIdentifierForDevice()->String {
//Get common part of Applicatoin Bundle ID, Note : getCommonPartOfApplicationBundleID is to be defined.
let commonAppBundleID = getCommonPartOfApplicationBundleID()
//Read from KeyChain using bunndle ID, Note : readFromKeyChain is to be defined.
if let vendorID = readFromKeyChain(commonAppBundleID) {
return vendorID
} else {
var vendorID = NSUUID().uuidString
//Save to KeyChain using bunndle ID, Note : saveToKeyChain is to be defined.
saveToKeyChain(commonAppBundleID, vendorID)
return vendorID
}
}