همه ابزارهای اندرویدی IMEI دارن؟
با سلام
من نیاز دارم تا یک مشخصه یونیک از ابزارهای اندرویدی که برنامه من رو نصب میکنن داشته باشم، چیزی که به ذهنم رسید IMEI بود. حالا میخاستم بدونم همه ابزارهای اندرویدی، این شماره رو دارن؟ مثلا تبلتهای بدون سیم کارت و خلاصه همه ؟!
و اینکه آیا باید از همین استفاده کنم؟ یا چیز دیگه ای هم هست که بشه ازش استفاده کرد.
من میخام یکسری اطلاعات از کاربرام روی سرور ذخیره کنم، البته هر گوشی فقط یکبار حق ثبت داره.
این متود که خروجیش یک String هست رو میتونی در اولین اجرای برنامت استفاده کنی.
طریقه ی کارش این طور هست که بعد از چک کردن androidId , deviceId برای بدست آوردن یک device_id انحصاری برای گوشی کاربر و در نظر گرفتن باگهای موجود در این رابطه در نهایت به صورت تصادفی خودش یک آیدی میسازه و اون رو در یک device_id.xml ذخیره میکنه. این رو هم در نظر داشته باشید که درصد خیلی کمی از کاربران کارشون به device_id تصادفی میرسه (احتمالا امولیتور یا تب لیت)
برای دفعات بعدی ورود به برنامه فقط کافیه که device_id ساخته شده در فایل device_id.xml رو فراخوانی کنی :)
میتونی با تغییرات اندکی device_id رو به عنوان Prefs هم ذخیره کنی.
public static String uuid() {
final String PREFS_FILE = "device_id.xml";
final String PREFS_DEVICE_ID = "device_id";
UUID uuid = null;
final SharedPreferences prefs = context.getSharedPreferences(PREFS_FILE, 0);
final String id = prefs.getString(PREFS_DEVICE_ID, null);
if (id != null) {
uuid = UUID.fromString(id);
return uuid.toString();
} else {
final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
try {
if ((androidId != null) && androidId != "9774d56d682e549c") {
uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8"));
prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit();
return uuid.toString();
} else {
final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
if (deviceId != null && deviceId != "0000000000000000") {
uuid = UUID.nameUUIDFromBytes(deviceId.getBytes("utf8"));
prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit();
return uuid.toString();
} else {
uuid = UUID.randomUUID();
prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit();
return uuid.toString();
}
}
}
catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
Permission:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
دوستان به نظرتون این چطوره ؟
یک شناسه ی واحد از دستگاه بدست بیاریم (1) بدیم به سرور ، سرور md5 کنه (که اگه شناسه یونیک باشه ، خروجی هم یونیک میشه ) بعد با یک الگوریتم سمت سرور یکم کد رو کامل تر کنیم ، مثلا اضافه کردن یک رشته ی 10 کارکتری تصادفی به md5 و در نظر گرفتن به عنوان کلید
1 - اینجا دیگه نیازی نیست بگیم شناسه فقط imei - سریال بلوتوث یا ... ، یه تابع تعریف می کنیم ، اولویت بندی می کنیم ، میگیم :
- سریال بلوتوث
- imei دستگاه
- Android ID
- Mac Address
- شماره تماس کاربر
- ایمیل کاربر
اینم میشه کد php
<?php function generateRandomString($length = 10) { $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $randomString = ''; for ($i = 0; $i < $length; $i++) { $randomString .= $characters[rand(0, strlen($characters) - 1)]; } return $randomString; } $key = "9774d56d682e549c"; $hash = md5($key); $FinalKey=$hash.generateRandomString(); echo $FinalKey; // Save FinalKey To DB (Maybe Check if Not Exist !)
متغییر key کلیدی هست که از Android اومده :)
با اجرای مجدد می بینید که فقط 10 کارکتر آخر متغییر هست (چون رندم تولید میشه ) پس ما باید قبل از ادامه ی عملیات (یعنی تولید قسمت رندم) برسی کنیم ببینیم کدی داریم که با اون مقدار شروع بشه یا نه
روش که زیاده ، یه نمونه کد گذاشتم که تو تولید مقدار ها مشکلی نداشته باشید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .