Comment puis-je obtenir un identifiant unique d'appareil dans Swift?
J'ai besoin d'un identifiant à utiliser dans la base de données et en tant que clé API pour mon service Web dans mon application sociale. Quelque chose pour garder une trace de l'utilisation quotidienne de ce périphérique et limiter ses requêtes à la base de données.
Merci!
Vous pouvez utiliser ceci (Swift 3):
UIDevice.current.identifierForVendor!.uuidString
Pour les anciennes versions:
UIDevice.currentDevice().identifierForVendor
ou si vous voulez une chaîne:
UIDevice.currentDevice().identifierForVendor!.UUIDString
Il n'est plus possible d'identifier de manière unique un périphérique après que l'utilisateur a désinstallé la ou les applications. La documentation dit:
La valeur de cette propriété reste la même tant que l'application (ou une autre application du même fournisseur) est installée sur le périphérique iOS. La valeur change lorsque l’utilisateur supprime toutes les applications de ce fournisseur du périphérique, puis réinstalle une ou plusieurs d’entre elles.
Vous pouvez également lire cet article de Mattt Thompson pour plus de détails:
http://nshipster.com/uuid-udid-unique-identifier/
Mise à jour pour Swift 4.1 , vous devrez utiliser:
UIDevice.current.identifierForVendor?.uuidString
Pour Swift 3.X Dernier code de travail, facilement utiliser;
let deviceID = UIDevice.current.identifierForVendor!.uuidString
print(deviceID)
Vous pouvez utiliser devicecheck (in Swift 4) documentation 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" ...
}
}
Utilisation typique:
En règle générale, vous utilisez les API DeviceCheck pour vous assurer qu'un nouvel utilisateur n'a pas déjà utilisé une offre sous un autre nom d'utilisateur sur le même appareil.
Action du serveur requise:
plus d'articles de Santosh Botre - Identifiant unique pour les appareils iOS
Votre serveur associé associe ce jeton à une clé d'authentification que vous recevez de Apple et utilise le résultat pour demander l'accès aux bits par périphérique.
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)
}
}
}