View Full Version : شمارش برنامه
darkenerboy
سه شنبه 19 فروردین 1393, 19:48 عصر
سلام
ببخشید بهترین راه برای شمارش تعداد گوشی هایی که برنامه ما نصب میکنن چیه ؟
ایا device ID قطعا یکتاست ؟
Nevercom
سه شنبه 19 فروردین 1393, 20:13 عصر
با احتمال بالایی یکتا هست.
اگه دیگه خیلی یکتا بودن براتون اهمیت داره چندتا پارامتر رو دریافت می کنید و خودتون یه شناسه ی منحصربفرد تولید می کنید
smemamian
سه شنبه 19 فروردین 1393, 20:24 عصر
سلام
گرفتن Device ID اصلاً پیشنهاد نمی شود.
فرض کنید ما از تابع
TelephonyManager.getDeviceId()
یا شبیه این چنین توابع ای استفاده کنیم. اما مشکل از جایی شروع میشه که :
تمامی دستگاه ها موبایل نیستند. برای مثال موزیک پلیرها و سخت افزارهایی که فقط Wifi هستند( و قابلیت نصب برنامه کاربردی دارند.) این چنین توابع جواب نمی دهد.
شما نیاز به مجوز READ_PHONE_STATE دارید که اگر طرف دستگاه پخش موزیک داشته باشه و بخواهد نرم افزار شما رو نصب کند نیازی به این مجوز ندارد.(و امکان خطاهم ممکن است رخ دهد. - خطای عدم نصب برنامه به علت قابل امن نبودن برنامه ممکن است دریافت کنید.)
روی تمامی موبایل ها این چنین توابع جواب حتمی ندارند، بدین معنی که ممکن است null برگشت داده شود. (قابل اطمینان نیستند.)
شما می تونید از کتابخانه های مفیدتری استفاده کنید که اطلاعات بیشتری به شما خواهد داد مثل:
لینک (http://barnamenevis.org/showthread.php?446564-%DA%A9%D8%B3%DB%8C-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-Google-Analytics-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D8%AF%D8%A7%D8%B1%D8%AF)
یا اینکه خودتون یک سرویس بنویسید و با کمک UUID (http://en.wikipedia.org/wiki/Universally_unique_identifier)ها برای هر نصب یک شناسه تعریف شود و برای شما
ارسال شود.
Nevercom
سه شنبه 19 فروردین 1393, 22:32 عصر
این مطلب رو بخونید: http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id
اگر برنامه ی شما قراره رو همه ی دستگاه ها، حتی دستگاه هایی که سیم کارت ندارن شاید نیاز باشه از ANDROID_ID استفاده کنید (تو لینک بالا توضیح داده)، اما این ID با هربار آپگرید سیستم عامل یا Factory Reset تغییر می کنه، درحالی که getDeviceID که IMEI رو برمیگردونه اینطور نیست.
IMEI وابسته به سیم کارت هست، یعنی دستگاهی که سیم کارت نمیخوره، IMEI نداره و DeviceId مقداری نداره و null هست، اگه دو سیم کارته باشه دوتا IMEI داریم.
برنامه ی من وابسته به این هست که کاربر سیم کارت رو داشته باشه، یعنی مخصوص تبلت و سایر دستگاه ها نیست و من تاحالا مشکلی با IMEI و getDeviceId نداشتم و بیشتر از ۲۰۰ هزار تا دستگاه در دیتابیس ما ذخیره شده. بخصوص اینکه در برنامه ی ما ثابت موندن شناسه ی دستگاه اهمیت داره.
هرکدوم از روش ها مزایا و معایب خودشون رو دارن، از روشی که برای برنامه تون مناسبتر هست استفاده کنید
smemamian
سه شنبه 19 فروردین 1393, 22:45 عصر
بله درست هست ولی وبلاگ توسعه دهندگان اندروید این تابع رو اصلاً پیشنهاد نمی کنند و نظرشون همون UUID هست.
لینک (http://android-developers.blogspot.com/2011/03/identifying-app-installations.html)
poorman
سه شنبه 19 فروردین 1393, 23:10 عصر
نظرتون راجع به این تابعی که اینجا معرفی شده چیه ؟؟؟
به نظر میاد که طرف خیلی مطمئن هست
http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id/17625641#17625641
darkenerboy
چهارشنبه 20 فروردین 1393, 09:37 صبح
با تشکر از همه دوستان
موضوعی که وجود داره این هستش که من باید داده ها رو در دیتابیس خودم داشته باشم
و نمیشه از این پنل ها استفاده کنم
نظرتون راجع به این کد چیه ؟
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHON Y_SERVICE);
final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getCont entResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String deviceId = deviceUuid.toString();
ترکیبی از ستا مقدار هستش !
poorman
چهارشنبه 20 فروردین 1393, 15:52 عصر
اون لینکی که من دادم رو چک کردین ؟؟؟ خیلی قشنگ توضیح داده در مورد دلایل استفاده از تابعی که معرفی کرده
استفاده از اون تابع نیاز به هیچ دسترسی به اطلاعات شخصی و ... گوشی نداره ( مثلا توی برنامه ها میبینیم زده دسترسی به تماسها، این کاربر رو به این فکر میندازه که ما داریم دزدی اطلاعات میکنیم )
اگر گوشی برگرده به حالت کارخونه ( ریست بشه ) یا ارتقاء سیستم عامل داشته باشه اون UUID عوض نمیشه
UUID که برمیگردونه 32 کاراکتری هست
روی همه دستگاه ها جواب میده، روی API 9 به پایین هم جواب میده
کلا من مورد منفی ندیدم راجع بهش
darkenerboy
چهارشنبه 20 فروردین 1393, 17:59 عصر
ممنون از توجه شما
نکته اول اینه که من برای 8 به بالاست
و امار میزان دستگاه ها با ورژن 9 اون با ایران همخوانی نداره
من هم این کد رو از همون صفحه برداشتم
از مطالب بالاتر که امتیاز بیشتری داشتن
و خروجی کد هم 00000000-54b3-e7c7-0000-000046bffd97 هستش
و دسترسی که لازم داره رو هم برنامه من بدون این کد هم لازم داره
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.