سلام به همه همراهان همیشگی پایگاه تخصصی پیشرفت
اگر برنامه نویسی اندروید انجام میدین، حتما براتون پیش اومده که خواسته باشین شناسهی منحصر به فردی برای کاربرانتون تولید کنین. امروز می خواهیم ۵ روش برای دریافت و ساخت شناسه ی منحصر به فرد برای کاربران رو به شما معرفی کنیم.
مواقع مختلفی ممکنه پیش بیاد که نیاز داشته باشیم تا دستگاه کاربرانمون رو با شناسه های منحصر به فردی از همدیگه تشخیص بدیم، مثلا:
- برای ذخیرهی امتیاز و اطلاعات کاربر در سمت سرور
- آنالیز و بررسی تعداد نصبها برای یک اپلیکیشن
- جلوگیری از نصب شدن یک اپ روی چندین دستگاه مختلف
- محدود کردن نصب یک اپ روی بعضی های گوشیهای خاص
- و موارد مختلف زیاد دیگه
راههای مختلفی برای انجام اینکار وجود داره ولی باید بگم هیچکدومشون به اندازهی کافی “عالی” نیست! بنابراین ممکنه هر کدوم از راهها برای حالات مختلفی خوب باشه و برای بعضی حالت ها نه.
۱- استفاده از Telephony Service موبایل کاربر:
اگر کاربران اپلیکیشن شما از “موبایل” استفاده می کنند ( و نه تبلت! )، استفاده از Telephony Service گزینه ی خوبی برای شماست…
با استفاده از Telephony Service می تونید شمارههای منحصر به فردی مثل IMEI, MEID, ESN و IMSI رو به راحتی به دست بیارید.
نکتهی مهمی که باید درنظر داشته باشین اینه که برای استفاده از این سرویس، نیاز دارید که دسترسی android.permission.READ_PHONE_STATE رو از کاربر دریافت کنین!
قانع کردن کاربران برای دادن این دسترسی مهم به اپلیکیشن شما کار ساده ای نیست…
همچنین Telephony Service روی بعضی از تبلت ها وجود ندارد، بنابراین این طیف از کاربران را از دست می دهید.
اما نگران نباشید، هنوز چند روش دیگه داریم 🙂
۲- استفاده از مک آدرس (MAC Address) موبایل کاربر:
با قاطعیت نسبتا خوبی میشه اینطور درنظر گرفت که همه ی دیوایس های اندرویدی، وای فای و بلوتوث دارند 🙂
پس برای دریافت یک شناسهی منحصر به فرد، میتونید از مک آدرس این دو ماژول استفاده کنید. فقط باید این نکته رو درنظر داشته باشید که اگه بلوتوث یا وای فای دستگاه کاربر خاموش باشه، مک آدرسی وجود نخواهد داشت 🙁
۳- استفاده از android.os.Build.SERIAL موبایل کاربر:
راه دیگهای که از نسخه ۲٫۳ اندروید به این سیستم عامل اضافه شده، استفاده از android.os.Build.SERIAL هست که می تونید برای دریافت یک آیدی منحصر به فرد ازش استفاده کنین. خوبی این روش این هست که برای تبلت ها و دستگاه هایی که Telephony Service ندارد هم کار میکند اما نکته ی منفی در این است که بعضی دستگاه هایی که سریال نامبر ندارد در این روش به اشکال بر می خورند!
۴- استفاده از Settings.Secure.ANDROID_ID:
این روش، نسبتا روش خوبیست. وقتی یک دستگاه اندرویدی بوت می شود، سیستمعامل یک شمارهی رندوم تولید کرده و آن را ذخیره می کند. این شمارهی ۶۴بیتی تا زمانی که کاربر دستگاه خود را به تنظیمات کارخانه برنگرداند ثابت باقی می ماند و از طریق Settings.Secure.ANDROID_ID قابل دسترسی است. نکته ی قابل ذکر اینجاست که این روش هم به طور ۱۰۰درصد قابل اعتماد نیست!
۵- استفاده از پیشنهاد آقای Reto Meier از Google:
از اونجایی که دریافت یک شناسه ی منحصر به فرد برای هر کاربر یک نیاز متداول در خیلی از اپلیکیشن هاست، استفاده از UUID رو به شما پیشنهاد می کنیم. این روش که توسط Reto Meier از Google در یکی از ارائه های Google I/O معرفی شد، به شکل زیر است:
private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";public synchronized static String id(Context context) {
if (uniqueID == null) {
SharedPreferences sharedPrefs = context.getSharedPreferences(
PREF_UNIQUE_ID, Context.MODE_PRIVATE);
uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null); if (uniqueID == null) {
uniqueID = UUID.randomUUID().toString();
Editor editor = sharedPrefs.edit();
editor.putString(PREF_UNIQUE_ID, uniqueID);
editor.commit();
}
} return uniqueID;
}
متد ()UUID.randomUUID یک آیدی منحصر به فرد برای یک نصب تولید می کنه که کافیه اون رو در جایی ذخیره کنید و بعدا برای شناسایی کاربران مختلف از این آیدیها استفاده کنید.
حتی می تونید این آیدی رو برای کاربر در جایی ذخیره کنید تا بعد از نصب اپلیکیشن روی یک دستگاه دیگه، کاربر رو با همین آیدی شناسایی کنید (مثلا در اولین نصب، این کد رو در سمت سرور ذخیره کنید و بعد از نصب شدن اپ روی گوشی دیگه توسط همین کاربر، بعد از لاگین شدن، این آیدی رو در سمت اپلیکیشن دریافت و ذخیره کنین)
جمعبندی
شناسایی دستگاهها در زمینه تولید اپهای اندرویدی کار سادهای نیست. حتی شاید بشه دلایل قابل قبولی هم برای “خوب نبودن” این کار آورد. به نظر میاد به جای شناسایی دستگاه های مختلف، شاید اگر به شناسایی نصبهایمختلف بپردازیم بهتر باشه که برای اینکار میتونید از همون روش UUID استفاده کنید. به هرحال اگر جایی نیاز به شناسایی “دستگاه” های مختلف از همدیگه داشتین، روشی که از بقیه ی روش ها بهتره شاید استفاده از ANDROID_ID باشه (مورد چهارم)… راه ۱۰۰درصدیای نیست ولی خوبه!
ممنون از اینکه وقت گذاشتید و تا انتها با هامون همراه بودین.
منتظر نظرات شما هستیم.
موفق باشید
یاعلی
دیدگاه ها