ورود

View Full Version : بدست آوردن شماره سریال دستگاه اندرویدی



samiasoft
پنج شنبه 04 مهر 1398, 02:09 صبح
سلام وقت بخیر

میخواستم یک شماره یکتا از دستگاه اندرویدی رو داشته باشم که خب طبیعتا شماره سریال دستگاه گزینه مناسبی هست.

برای بدست اوردن شماره سریال دستگاه اندرویدی حتما از دستورات زیر استفاده کردید :
String serial = Build.SERIAL
یا
String deviceID__ = Settings.Secure.getString(getApplicationContext(). getContentResolver(), Settings.Secure.ANDROID_ID);
مساله ای که وجود داره اینه هنگامی که این دستور رو شما مینویسید بهتون پیغامی میده با این عنوان :
using getstring to get device identifiers is not recommended


که استفاده از این دستور رو گوگل توصیه نمیکنه.
بخاطرهمین در این صفحه (https://developer.android.com/training/articles/user-data-ids.html) انگار توصیه کرده بیاییم بجای اون از دستور زیر استفاده کنیم :



var uniqueID = UUID.randomUUID().toString()
اما اشاره کرده در اندروید 9 ما بایستی مجوز READ_PRIVILEGED_PHONE_STATE هم داشته باشیم.

مشکلی که داشتم این هست که من این permission رو نتونستم در manifist تعریف کنم چون اصلا چنین مجوزی وجود نداره.

نظر شما دراین باره چیست؟
آیا من از Build.SERIAL استفاده کنم در اندروید های بالاتر به مشکل میخورم؟

rubiks.kde
پنج شنبه 04 مهر 1398, 15:41 عصر
سلام

در مورد استفاده از دسترسی READ_PRIVILEGED_PHONE_STATE : این دسترسی تنها برای برنامه های سیستمی قابل استفاده است منظور برنامه هایی که در مسیر /system/priv-app قرار دارند. به صورت معمول برای برنامه های عادی قابل استفاده نیست.

استفاده از ANDROID_ID هم به عنوان شناسه یکتا چندان جالب نیست چرا چون یکتا نیست. توی آندروید های کمتر از 8 این مقدار به صورت تصادفی و در اولین بالا اومدن گوشی تولید میشه و در نتیجه با هر بار فکتوری ریست گوشی این مقدار تغییر میکنه از طرفی توی آندرویدهای جدیدتر از 8 هم این مقدار ترکیب سه مقدار کلید sign برنامه ، کاربر و دستگاه است. به همین خاطر این مقدار با ایجاد یه user توی همون دستگاه کلید جدید میده ، تغییر sign کلید برنامه باعث تغییر اون میشه و فکتوری ریست هم باعث تغییر اون میشه.

Build.SERIAL هم از api 26 منقضی شده و شما باید از تابع getSerial استفاده کنید که از آندروید 10 به بعد دچار مشکل خواهید شد چون دسترسی به مقدارهای ثابت مثل IMEI و سریال نامبر تنها به برنامه هایی داده میشه که READ_PRIVILEGED_PHONE_STATE داشته باشن و برنامه های عادی هم توانایی تعریف این دسترسی ها رو ندارن.

برنامه هایی هم که استفاده کرده باشن اگه targets برنامه بیشتر از آندروید 10 باشه با خطای امنینی روبرو میشن و کرش میشه و اگه targets برنامه آندروید 9 به پایین باشه و دسترسی READ_PHONE_STATE رو داشته باشن null برمیگرده و در غیر این صورت دوباره کرش و خطای امنیتی میده.

samiasoft
جمعه 05 مهر 1398, 16:46 عصر
سلام

در مورد استفاده از دسترسی READ_PRIVILEGED_PHONE_STATE : این دسترسی تنها برای برنامه های سیستمی قابل استفاده است منظور برنامه هایی که در مسیر /system/priv-app قرار دارند. به صورت معمول برای برنامه های عادی قابل استفاده نیست.

استفاده از ANDROID_ID هم به عنوان شناسه یکتا چندان جالب نیست چرا چون یکتا نیست. توی آندروید های کمتر از 8 این مقدار به صورت تصادفی و در اولین بالا اومدن گوشی تولید میشه و در نتیجه با هر بار فکتوری ریست گوشی این مقدار تغییر میکنه از طرفی توی آندرویدهای جدیدتر از 8 هم این مقدار ترکیب سه مقدار کلید sign برنامه ، کاربر و دستگاه است. به همین خاطر این مقدار با ایجاد یه user توی همون دستگاه کلید جدید میده ، تغییر sign کلید برنامه باعث تغییر اون میشه و فکتوری ریست هم باعث تغییر اون میشه.

Build.SERIAL هم از api 26 منقضی شده و شما باید از تابع getSerial استفاده کنید که از آندروید 10 به بعد دچار مشکل خواهید شد چون دسترسی به مقدارهای ثابت مثل IMEI و سریال نامبر تنها به برنامه هایی داده میشه که READ_PRIVILEGED_PHONE_STATE داشته باشن و برنامه های عادی هم توانایی تعریف این دسترسی ها رو ندارن.

برنامه هایی هم که استفاده کرده باشن اگه targets برنامه بیشتر از آندروید 10 باشه با خطای امنینی روبرو میشن و کرش میشه و اگه targets برنامه آندروید 9 به پایین باشه و دسترسی READ_PHONE_STATE رو داشته باشن null برمیگرده و در غیر این صورت دوباره کرش و خطای امنیتی میده.

تشکر از شما
آنطور که متوجه شدم کلا معایب این دستورات رو گفتید...پس به نظرتون راه حل دیگری وجود نداره؟!

rubiks.kde
جمعه 05 مهر 1398, 18:25 عصر
یه مقدار با اومدن آندروید 10 و مسایل امنیتی کار مشکل میشه چون دسترسی به مقدارهای ثابت و غیرقابل تغییر ، قابل دسترس توسط برنامه های عادی نیست.

هدفتون برای استفاده از این شناسه یکتا چی هست؟

samiasoft
شنبه 06 مهر 1398, 01:33 صبح
یه مقدار با اومدن آندروید 10 و مسایل امنیتی کار مشکل میشه چون دسترسی به مقدارهای ثابت و غیرقابل تغییر ، قابل دسترس توسط برنامه های عادی نیست.

هدفتون برای استفاده از این شناسه یکتا چی هست؟

یک اپلیکشن برای یک وبسایتی نوشته بودم که میخواستم تعداد بازدید رو برایش ثبت کنم.

بخاطرهمین میخواستم از شماره سریال دستگاه استفاده کنم و هربار چک کنم که ایا قبلا مطلب مربوطه را بازدید کرده یا خیر.

البته اپ مربوطه دارای قسمت login هم هست..من میتونستم براساس نام کاربری این کار رو انجام بدم...اما خب ممکنه کاربر مربوطه login نکرده باشه و بصورت میهمان اپ رو استفاده کنه بخاطرهمین دیگر نام کاربری اینجا معنی پیدانمیکرد برای همین خواستم از شماره سریال دستگاه استفاده کنم.

rubiks.kde
شنبه 06 مهر 1398, 14:17 عصر
یک اپلیکشن برای یک وبسایتی نوشته بودم که میخواستم تعداد بازدید رو برایش ثبت کنم.

بخاطرهمین میخواستم از شماره سریال دستگاه استفاده کنم و هربار چک کنم که ایا قبلا مطلب مربوطه را بازدید کرده یا خیر.

البته اپ مربوطه دارای قسمت login هم هست..من میتونستم براساس نام کاربری این کار رو انجام بدم...اما خب ممکنه کاربر مربوطه login نکرده باشه و بصورت میهمان اپ رو استفاده کنه بخاطرهمین دیگر نام کاربری اینجا معنی پیدانمیکرد برای همین خواستم از شماره سریال دستگاه استفاده کنم.

اگه در این حد است که حساسیت بالایی نداره میتونید از همون ANDROID_ID استفاده کنید