Swiftでデバイスの一意のIDを取得する方法を教えてください。
データベースで使用し、ソーシャルアプリでWebサービスのAPIキーとして使用するには、IDが必要です。このデバイスが毎日使用していることを追跡し、データベースへのクエリを制限するための何か。
ありがとうございます。
これを使うことができます(Swift 3):
UIDevice.current.identifierForVendor!.uuidString
古いバージョンの場合
UIDevice.currentDevice().identifierForVendor
文字列が必要な場合は、
UIDevice.currentDevice().identifierForVendor!.UUIDString
ユーザーがアプリをアンインストールした後にデバイスを一意に識別する方法はもうありません。ドキュメントは言う:
アプリ(または同じベンダーの別のアプリ)がiOSデバイスにインストールされている間、このプロパティの値は変わりません。ユーザーがそのベンダーのすべてのアプリをデバイスから削除し、その後それらのアプリを再インストールすると、値が変わります。
詳細については、Mattt Thompsonによるこの記事も参照してください。
http://nshipster.com/uuid-udid-unique-identifier/
Swift 4.1用のアップデートを使用する必要があります。
UIDevice.current.identifierForVendor?.uuidString
Swift 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")!)
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)
}
}
}