답변:
이것을 사용할 수 있습니다 (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
UIDevice 클래스에 존재하는 identifierForVendor 공용 속성을 사용할 수 있습니다
let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
print("UUID: \(UUIDValue)")
스위프트 3 편집 :
UIDevice.current.identifierForVendor!.uuidString
편집 종료
Apple 문서를 devicecheck (Swift 4에서) 사용할 수 있습니다
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로부터받은 인증 키와 결합하고 결과를 사용하여 장치 별 비트에 대한 액세스를 요청합니다.
스위프트 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)
}
}
}
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
}
}