কীভাবে সুইফটে একটি অনন্য ডিভাইস আইডি পাবেন?


180

আমি কীভাবে সুইফটে একটি ডিভাইসগুলির অনন্য আইডি পেতে পারি?

ডাটাবেসে এবং আমার সামাজিক অ্যাপ্লিকেশনটিতে আমার ওয়েব পরিষেবার জন্য API- কী হিসাবে ব্যবহার করার জন্য আমার একটি আইডি দরকার। এই ডিভাইসগুলি প্রতিদিনের ব্যবহারের উপর নজর রাখার জন্য এবং এর অনুসন্ধানগুলি ডেটাবেজে সীমাবদ্ধ করার জন্য কিছু।

ধন্যবাদ!

উত্তর:


385

আপনি এটি ব্যবহার করতে পারেন (সুইফট 3):

UIDevice.current.identifierForVendor!.uuidString

পুরানো সংস্করণগুলির জন্য:

UIDevice.currentDevice().identifierForVendor

অথবা আপনি যদি একটি স্ট্রিং চান:

UIDevice.currentDevice().identifierForVendor!.UUIDString


ব্যবহারকারী অ্যাপ (গুলি) আনইনস্টল করার পরে কোনও ডিভাইস অনন্যভাবে সনাক্ত করার আর উপায় নেই। নথি বলছে:

আইওএস ডিভাইসে অ্যাপ্লিকেশন (বা একই বিক্রেতার কাছ থেকে অন্য অ্যাপ্লিকেশন) ইনস্টল করার সময় এই সম্পত্তিটির মান একই থাকে। যখন ব্যবহারকারী সেই সমস্ত বিক্রেতার অ্যাপসটিকে ডিভাইস থেকে মুছে ফেলে এবং পরে তাদের এক বা একাধিকটি পুনরায় ইনস্টল করে তখন মানটি পরিবর্তিত হয়।


এছাড়াও আপনি আরো বিস্তারিত জানার জন্য Mattt থম্পসন দ্বারা এই নিবন্ধটি পড়তে চান করতে পারেন:
http://nshipster.com/uuid-udid-unique-identifier/

সুইফট ৪.১-এর আপডেট , আপনাকে ব্যবহার করতে হবে:

UIDevice.current.identifierForVendor?.uuidString

সম্ভবত .UID স্ট্রিং যুক্ত করুন যাতে এটি আসলে কোনও সার্ভারে প্রেরণ করা যায়?
ড্যানিয়েল গালাস্কো

2
হা. আমি অনুভব করেছি যে এটি করা সুস্পষ্ট জিনিস, তবে আমি এটিকে উত্তরে অন্তর্ভুক্ত করেছি।
এটমিক্স

19
অ্যাপ আনইনস্টল করার পরে এই নম্বরটি আর আগের মতো নয়। অ্যাপ আনইনস্টল করার পরেও কোনও ডিভাইস ট্র্যাক করার কোনও উপায় আছে কি?
jmcastel

5
আরও ভাল প্রশ্ন হ'ল এটি আনইনস্টল করার পরে যদি মুছে ফেলা হয়, যখন আইডি আর ব্যবহার না হয় আপনি কীভাবে আপনার সার্ভারে তাদের অ্যাকাউন্ট মুছবেন?
জেসন জি

2
@ উমাইর আফজাল অনেকগুলি জিনিস সিমুলেটারে কাজ করে না। আপনি কি এটি বাস্তব ডিভাইসে ব্যবহার করে দেখেছেন?
এটমিক্স

10

আপনি ইউআইডিভাইস ক্লাসে উপস্থিত আইডেন্টিফারফরভেেন্ডার সর্বজনীন সম্পত্তি ব্যবহার করতে পারেন

let UUIDValue = UIDevice.currentDevice().identifierForVendor!.UUIDString
        print("UUID: \(UUIDValue)")

সম্পাদনা সুইফট 3:

UIDevice.current.identifierForVendor!.uuidString

শেষ সম্পাদনা

সম্পত্তিক্রমক্রমের জন্য স্ক্রিনশট


3
এটি @ অ্যাটমিক্স উত্তরের কেবল একটি অনুলিপি
অ্যাশলে মিলস

10

জন্য সুইফট 3.x সর্বশেষ ওয়ার্কিং কোড, সহজেই ব্যবহার;

   let deviceID = UIDevice.current.identifierForVendor!.uuidString
   print(deviceID)

3
এই পরিবর্তনগুলি যখনই আনইনস্টল করুন এবং অ্যাপটি পুনরায় ইনস্টল করুন use
আইপেটর

7
এটি কেবলমাত্র @ অ্যাটমিক্স এবং জয়প্রকাশদুবের উত্তরগুলির একটি অনুলিপি
অ্যাশলে মিলস

10

আপনি ডিভিচেক ব্যবহার করতে পারেন (সুইফ্ট 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" ...
    }
}

সাধারণ ব্যবহার:

সাধারণত, আপনি নতুন ডিভাইসটি একই ডিভাইসে আলাদা ব্যবহারকারীর নামের অধীনে কোনও অফার ইতিমধ্যে ছাড়িয়েছে না তা নিশ্চিত করার জন্য আপনি ডিভাইসচেক এপিআইগুলি ব্যবহার করেন।

সার্ভারের ক্রিয়া প্রয়োজন:

ডাব্লুডব্লিউডিসি 2017 - সেশন 702 দেখুন

সন্তোষ বোত্রে নিবন্ধ থেকে আরও - আইওএস ডিভাইসগুলির জন্য স্বতন্ত্র পরিচয়দাতা

আপনার সম্পর্কিত সার্ভারটি এই টোকেনটিকে একটি প্রমাণীকরণ কীয়ের সাথে একত্রিত করে যা আপনি অ্যাপল থেকে পেয়েছেন এবং ফলাফলটি প্রতি ডিভাইস বিটগুলিতে অ্যাক্সেসের জন্য অনুরোধ করে uses


1
যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে টোকেন প্রজন্মটি ডিসিডিভাইস.জেনারেট টোকেন () ব্যবহার করে সম্পাদিত হয় এবং প্রতিটি কল একটি অনন্য, এলোমেলো ডিভাইস_ টোকেন উত্পন্ন করে। অতএব, ডিভাইস_ টোকেন অবিচ্ছিন্ন নয়, তবে ক্ষুদ্রতর। আমি যা বুঝতে পারি না সেটি হ'ল সার্ভারটি কীভাবে একটি ডিভাইসের সাথে একটি সাময়িক টোকেন সংযুক্ত করতে সক্ষম।
ব্যবহারকারী 1118764

@ user1118764 "দুটি বিট সেট করুন - অ্যাপ্লিকেশন সার্ভার এই টোকেনটি ভাগ করে নেওয়ার জন্য বিট মান সেট করবে will" এখানে পড়তে medium.com/@santoshbotre01/... সরকারী নথিপত্র থেকে এবং এখানে developer.apple.com/documentation/devicecheck/... এবং 702 অধিবেশন developer.apple.com/videos/play/wwdc2017/702
iluvatar_GR

1

সুইফট 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")!)

2
যদি ব্যবহারকারী অ্যাপ্লিকেশন মুছে ফেলেন তবে এটি অকেজো কারণ ব্যবহারকারী অ্যাপ্লিকেশনগুলি অ্যাপ্লিকেশন আনইনস্টল করার সাথে মুছে ফেলা হয়।
রেহান আলী

0
if (UIDevice.current.identifierForVendor?.uuidString) != nil
        {
            self.lblDeviceIdValue.text = UIDevice.current.identifierForVendor?.uuidString
        }

1
দয়া করে আপনার কোড এবং / অথবা বিস্তারিত পোস্ট করুন এবং এটি কীভাবে পোস্ট করা প্রশ্নের সমাধান করে তার একটি ব্যাখ্যা প্রস্তাব করুন।
রায়াননার্ড

-1
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)
        }
    }
}

-1

ব্যবহারকারী ডিভাইস থেকে সেই বিক্রেতার সমস্ত অ্যাপস মুছে ফেললে সনাক্তকারীের ফরভেন্ডারের মান পরিবর্তিত হয়, আপনি যদি নতুন নতুন ইনস্টলেশনগুলির জন্য এমনকি অনন্য আইডি রাখতে চান, আপনি নীচের ফাংশনটি ব্যবহার করার চেষ্টা করতে পারেন

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
    }
}

কে কখনও এই উত্তরটি ভোট দিয়েছে, আপনি দয়া করে ব্যাখ্যা করতে পারেন কেন এটি নিচে ভোট দিয়েছে? getCommonPartOfApplicationBundleID (), readFromKeyChain, saveToKeyChain হ'ল সেই কাস্টম পদ্ধতিগুলি যা আপনাকে প্রয়োগ করতে হবে, আমি সেই সংজ্ঞাটি উত্তরের আকার না বাড়ানোর চিন্তাভাবনায় অন্তর্ভুক্ত করিনি।
শিহাব

অ্যাপটি আনইনস্টল করা অবস্থায় কীচেইনে থাকা সঞ্চিত মানগুলি কি টিকে থাকে?
আনিস

1
@ আনিস, আপনি সঠিক বলেছেন আমার উত্তরটি আইওএস 10.3 বিটা 2 থেকে বৈধ নয়, কোনও ভাগ করা অ্যাপস না থাকলে অ্যাপ্লিকেশন আনইনস্টল করার পরে এটি কীচেন আইটেমগুলি স্বয়ংক্রিয়ভাবে মুছে দেয়। সুতরাং অবশেষে এটি আইডেন্টিফায়ার ফরভেন্ডার মেথিডের মতো একই আচরণ হবে।
শিহাব

-17

আমি চেষ্টা করেছি

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

পরিবর্তে

let UUID = NSUUID().UUIDString

এবং এটি কাজ করে।


30
এনএসইউইডি ()। ইউইউডিস্ট্রিং আপনাকে প্রতিবার একটি নতুন স্ট্রিং দেবে
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.