آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

همه ابزارهای اندرویدی IMEI دارن؟

Reza AF  9 سال پیش  9 سال پیش
+4 0

با سلام

من نیاز دارم تا یک مشخصه یونیک از ابزارهای اندرویدی که برنامه من رو نصب میکنن داشته باشم، چیزی که به ذهنم رسید IMEI بود. حالا میخاستم بدونم همه ابزارهای اندرویدی، این شماره رو دارن؟ مثلا تبلتهای بدون سیم کارت و خلاصه همه ؟!

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

من میخام یکسری اطلاعات از کاربرام روی سرور ذخیره کنم، البته هر گوشی فقط یکبار حق ثبت داره.

0 0
فقط دستگاه هایی که سیم کارت می خورن IMEI دارن.تبلتهایی که سیم کارت نمیخورن IMEI ندارن مثل این که. (9 سال پیش)
0 0
رفتی سراغشا!! من فکر نمیکنم ربطی به سیم کارت داشته باشه ولی مطمین نیستم. (9 سال پیش)
0 0
درخواست کاربران زیاد بود! خب از چه روشی میشه استفاده کرد که همه ابزارها داشته باشن؟ (9 سال پیش)
0 0
این لینک رو ببینید. (9 سال پیش)
0 0
البته کار من اونقدر حیاتی نیست که بخام خیلی امنیتی کار کنم، من فقط یک شناسه میخام که روی همه ایراها باشه و بصورت یکتا هم باشه که بشه با اون شناسه کاربر رو شناسایی کرد (9 سال پیش)
0 0
برنامه با سرور کار میکنه؟ امنیت توش مهم نیست؟ (9 سال پیش)
0 0
آدرس سخت افزار بلوتوث در هر دستگاهی بهترینه .... در همه دستگاه ها وجود داره و کاملا منحصر بفرده و با آپدیت سیستم عامل یا ریست فکتوری ... تغییر نمیکنه : لینک (9 سال پیش)
0 0
بله آقای حسین زاده، برنامه یکسری اطلاعات میفرسته به سرور. درواقع یجور ثبت امتیاز کاربره، کاربر امتیاز خودش رو اراسل میکنه و میتونه امتیازات بقیه رو هم ببینه.امنیت مهم هست نه اونقدری که مثلا تراکنش بانکی انجام بشه. درحد همین ثبت امتیاز بازی! حامد جان دستگاههایی که بلوتوث ندارن چی؟ (9 سال پیش)
0 0
دیگه میزان امنیتش با خودت. برای هر کاربر میتونی یه گاید از سرور بگیری و تو برنامت ذخیره کنی. 100% یکتا و بی دردسر (9 سال پیش)
0 0
خب در اینصورت مشکل پیش میاد، اونم اینکه اگه کاربر یکبار برنامه رو حذف کنه، دیگه اطلاعاتش روی سرور قابل دسترسی نیست (9 سال پیش)
0 0
البته مشکل بزرگتری هم هست، اونم اینکه اصلا نمیدونم اینی که شما گفتین چی هست! فقط حدس زدم که مثلا خودم از سرور بهش یک آی دی اختصاص بدم! همینه؟ (9 سال پیش)
0 0
و یه چیز دیگه، اگه همون چیزی باشه که من حدس میزنم، احتمالا سمت سرور کلی کد باید بنویسم که متاسفانه من اصلا php بلد نیستم فقط درحد کدهایی که استاد اموزش دادن بلدم. (9 سال پیش)
0 0
یه دستگاه نام ببر بلوتوث نداشته باشه (9 سال پیش)
0 0
globally unique identifier لینک رشته ای یکتا. تا زمانی که فایل این رشته پاک نشده باشه مشکلی وجود نداره. (9 سال پیش)
0 0
بعضی از تبلت ها مثل smart touch بلوتوث ندارند البته اینقدر دستگاه های بدون بلوتوث کم هستن که کالعدم حساب کنید بهترن (9 سال پیش)
0 0
تقریبا اکثر تبلتهای ارزون قیمت بازار بلوتوث ندارن (9 سال پیش)
0 0
مطمئن هستی که ابلت های ارزون قیمت بلوتوث ندارند ... چون من خودم یه تبلت ارزان قیمت هیوندای خریدم و قبل از خرید این تبلت تمام تبلت های ارزون قیمت را بررسی کردم .... تا اونجایی که من تا تبلت های 200 هزار تومانی دیدم همشون بلوتوث و وای فای داشتند ..حالا زیر 200 هزار تومانی را دیگه ندیدم (9 سال پیش)
0 0
ببخشید تا 300 هزار تومان منظورم بود (9 سال پیش)
0 0
من قبلا اکستروم داشتم که بلوتوث نداشت، بعدشم آینول داشتم که اونم نداشت، الان یه ایسوس دارم که این داره! (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
SaM MP  9 سال پیش
+4 0

این متود که خروجیش یک 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" />
0 0
اگه بنا به ذخیره تو فایل باشه که گرفتن گاید از سرور بی دردسر تره! (9 سال پیش)
0 0
میشه به صورت یک String در preferences ذخیره کرد اشاره کردم، تازه این متود برای هر نصب فقط یک بار اجرا میشه (9 سال پیش)
0 0
preferences هم یه فایله. فقط گوشی روت نشده بهش دسترسی نداره. - اون متد هم یکبار اجرا میشه، کلا بحث اینه که مقدار یا هر بار محاسبه بشه که قابل جعل نباشه یا ذخیره میشه که قابل جعل هست. حالا مقدار ذخیره شده تو فایل از کجا بیاد دیگه تفاوتی نداره. پس ارزش محاسبه شدن هم نداره (9 سال پیش)
0 0
این کد همیشه بک خروجی داره؟ یعنی اگه کاربر برنامه رو حذف کنه و دوباره نصب کنه بازم همون رشته قبلی رو تولید میکنه؟ (9 سال پیش)
0 0
تنها مشکلش همینه که مهندس گفتن، کاربر به xml ذخیره شده دسترسی پیدا کنه و تغییراتی توش بده (9 سال پیش)
0 0
میشه این کاید رو یه توضیحی بدید، بلاخره به بهترین و امنترین روش برسیم تو خیلی از برنامه ها لازم میشه، مال منم یک روش پیشنهادی بود (9 سال پیش)
0 0
این مد آخرین قسمتش کد رندومه. دو بار به اینجا برسه 2 تا خروجی متفاوت میده. GUID رو هم بالا توضیح دادم (9 سال پیش)
0 0
بله درسته احتمالا در امولیتور و یا تب لیت کارش به راندوم برسه که در این صورت با پاک شدن xml قابل تغییر هست(در اصل دلیل ذخیره در xml هم همین مرحله سومش هست)، برای بقیه حتما یکتاست (9 سال پیش)
پاسخ به سوال 
مجتبی یگانه  9 سال پیش
+4 0

دوستان به نظرتون این چطوره ؟

یک شناسه ی واحد از دستگاه بدست بیاریم (1)   بدیم به سرور ، سرور md5 کنه (که اگه شناسه یونیک باشه ، خروجی هم یونیک میشه ) بعد با یک الگوریتم سمت سرور یکم کد رو کامل تر کنیم ، مثلا اضافه کردن یک رشته ی 10 کارکتری تصادفی به md5 و در نظر گرفتن به عنوان کلید

1 - اینجا دیگه نیازی نیست بگیم شناسه  فقط imei - سریال بلوتوث یا ... ، یه تابع تعریف می کنیم ، اولویت بندی می کنیم ، میگیم :

  1. سریال بلوتوث
  2. imei دستگاه
  3. Android ID
  4.  Mac Address
  5. شماره تماس کاربر
  6. ایمیل کاربر 

اینم میشه کد 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 کارکتر آخر متغییر هست (چون رندم تولید میشه ) پس ما باید قبل از ادامه ی عملیات (یعنی تولید قسمت رندم) برسی کنیم ببینیم کدی داریم که با اون مقدار شروع بشه یا نه 

روش که زیاده ، یه نمونه کد گذاشتم که تو تولید مقدار ها مشکلی نداشته باشید

0 0
روش جالبیه ممنون، فقط اینجا بحث روی مرحله اول یعنی گرفتن شناسه واحد از دستگاه هست، این که اولویت بندی کردی فکر خوبیه نمیدونم دستگاهی پیدا میشه که از این متود در بره یا نه :)) (9 سال پیش)
0 0
خواهش میکنم :) - اولویت بندی من همین جوری بود ، حالا میشه بر اساس درصد احتمال وجود این مقدار اونها رو درست تر اولویت بندی کرد ، اما برای کارهای ساده ، فکر کنم Mac Address گزینه ی مناسبی باشه ، لینک T کمتر دستگاهی پیدا میشه که شبکه نداشته باشه ، یعنی نه سیم کارت بخوره ، نه وای فای داشته باشه ، حتی اگه نداشته باشه ، میشه بریم سمت بلوتوث ، به هر حال تولید کد واحد اونقدر ها هم سخت نیست :) (9 سال پیش)
0 0
وقتی متد مشخصی برای تولید شناسه نداری پس مجبوری شناسه رو ذخیره کنی. گرفتن این مقادیر ارسالشون به سرور - هش کردن - جمع تعریف شده با یه رشته ، تا اینجاش پردازش اضافس. خروجی همون کاری رو نهایتا برات میکنه که یه گاید انجام میده (9 سال پیش)
0 0
یه سوال : اگه هشی که تولید شده یونیک باشه که هست ، چون موارد که در 1 ذکر شدن همشون منحصر به فرد هستند - پس دیگه اون 10 کاراکتری که تصادفی تولید و به کد اضافه شدن برای چیه؟ (9 سال پیش)
0 0
بعد چرا اصلاً باید هش بشه ؟ برای اینکه همه ی کلید ها از لحاظ فرمت یکی باشند؟ (9 سال پیش)
0 0
آقای حسین زاده برای استفاده از گاید من باید اول گاید رو از سرور بگیرم و هم توی سرور و هم تو گوشی ذخیره کنم ، ازون به بعد با او شناسه با سرور ارتباط بگیرم، درسته؟ (9 سال پیش)
0 0
بله. (9 سال پیش)
0 0
منظور از گاید چیه؟ همون guide خودمونه؟ یا چیز دیگه ایه؟ (9 سال پیش)
0 0
GUID - بالاتر لینک گذاشته بودم لینک (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .