مطبات تحديد جهاز Android


قد يحتاج بعض المطورين إلى تحديد أجهزة Android لمستخدميهم. غالبًا ما يتم ذلك ليس من أجل التعرف على الجهاز ، ولكن لتحديد التثبيت المحدد للتطبيق. قابلت أيضًا العديد من الحالات عندما كان ذلك ضروريًا ، إذا كان لدى المطور العديد من التطبيقات وأراد أن يفهموا أنهم يعملون في نفس البيئة.

تقول Google إن التعرف على الجهاز أمر سهل. لكننا نتحدث عن Android :)

تركز هذه المقالة على التطبيقات أو المكتبات التي لا ترغب في الحصول على خدمات Google.

لذلك ، دعنا نتعمق في هذه المغامرة الرائعة المتمثلة في الحصول على معرف جهاز فريد من نوعه.

هنا نرى عدة طرق:


  • معرف الإعلان
  • IMEI
  • عنوان MAC
  • الرقم التسلسلي
  • معرف Android

لا يبدو سيئًا حتى الآن ، أليس كذلك؟ هناك ما يصل إلى خمس طرق للحصول على معرف فريد لجهاز Android. أنا متأكد من أنك إذا كنت لا تزال تتعثر على الشبكة ، فستجد بالتأكيد طريقتين أخريين ، لكنني صنعت هنا أكثر الطرق شعبية. لذلك دعونا نذهب بالترتيب.

معرف الإعلان


هذا هو معرف الإعلان الفريد الذي توفره خدمات Google Play. من الضروري أن يعمل الإعلان ، حتى تفهم Google الإعلانات التي يمكن عرضها لمستخدم معين وأي الإعلانات التي تم عرضها بالفعل باستخدام لافتات الإعلانات المضمنة في التطبيقات. وهذا يعني أيضًا أنك ستفقد هذا المعرّف إذا تم تنزيل التطبيق الخاص بك ، على سبيل المثال ، من Amazon ، وبالإضافة إلى ذلك ، سيكون عليك سحب مكتبات Google إلى التطبيق الخاص بك.

dependencies { compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.google.android.gms:play-services:6.5.87' } 

الخلاصة: نحن لا نحدد الجهاز في جميع الحالات.

لكننا نريد بالتأكيد ، أليس كذلك؟ ثم المضي قدما.

IMEI


هذا هو المعرف الدولي للأجهزة المحمولة المستخدمة على هواتف GSM. يتم استخدام رقم IMEI بواسطة الشبكات لتحديد الهواتف الذكية ومنع الوصول إلى شبكة من الأجهزة المسروقة أو المدرجة في القائمة السوداء. ولكن لسوء الحظ مع IMEI يمكن أن تنشأ عدد من المشاكل:


 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { String imei = telephonyMgr.getImei(); } else { String imei = telephonyMgr.getDeviceId(); } 

الخلاصة: نحن لا نحدد الجهاز في جميع الحالات ، ويمكنهم أيضًا خداعنا: C

عنوان MAC


لا موثوقة 100 ٪. يتحدث Google عن هذا الأمر ، لكن لسوء الحظ ، قابلت بالفعل اثنين من التطبيقات التي تعتمد على عنوان MAC الخاص بالجهاز. لا تفعل ذلك.
قد يكون من الممكن استرداد عنوان Mac من جهاز WiFi أو جهاز Bluetooth. لا نوصي باستخدام هذا كمعرف فريد. لتبدأ ، ليست جميع الأجهزة لديها واي فاي. أيضًا ، إذا لم يتم تشغيل WiFi ، فقد لا يبلغ الجهاز عن عنوان Mac.

الرقم التسلسلي


يعتبر رقمًا تسلسليًا فريدًا للجهاز ، والذي يبقى معه حتى النهاية. يمكنك الحصول عليها بهذه الطريقة:

 //Until Android 7.1 (SDK 25) Build.SERIAL //Android 8 (SDK 26) ++ Build.getSerial() 

والآن عن المشاكل. أولاً ، للحصول على رقم تسلسلي ، ستحتاج إلى مطالبة المستخدم بالحصول على إذن READ_PHONE_STATE ، وقد يرفض المستخدم ذلك. ثانيا ، يمكن تغيير الرقم التسلسلي.

الخلاصة: نحن لا نحدد الجهاز في جميع الحالات ، يجب أن نطلب إذنًا من المستخدم ، الذي يقوم بخداعهم ولا يزال بإمكاننا خداعنا.

معرف Android


- ها هو! - يجب علينا الصراخ. - الحل لجميع مشاكلنا!

يعد معرف Android معرفًا فريدًا للجهاز. إنها قيمة 64 بت يتم إنشاؤها وتخزينها أثناء التمهيد الأول للجهاز.
يمكنك الحصول عليه مثل هذا:

 Secure.getString(getContentResolver(), Secure.ANDROID_ID); 

يبدو أن هذا الخط القصير ينقذنا من الصداع في تحديد الجهاز. حتى مستخدمي Google يستخدمون Android_ID لـ LVL في المثال.

وهنا آمالنا تنهار ولن يتغير شيء. بعد التحديث إلى Android 8 ، أصبح Android_ID الآن فريدًا لكل تطبيق مثبت. ولكن ، إلى جانب هذا ، تهتم Google بنا ، لذا ستبقى التطبيقات التي تم تثبيتها قبل التحديث بنفس المعرفات التي توفرها Google باستخدام خدمة مكتوبة خصيصًا لهذا الغرض. ولكن إذا تم إلغاء تثبيت التطبيق ثم إعادة تثبيته ، فسيكون Android_ID مختلفًا. لمنع حدوث ذلك ، تحتاج إلى استخدام KeyValueBackup.


ولكن يجب تسجيل خدمة النسخ الاحتياطي هذه ، وأيضًا تحديد اسم الحزمة. علاوة على ذلك ، تقول الوثائق أن هذا قد لا يعمل لأي سبب من الأسباب. وعلى من يقع اللوم؟ لا أحد ، تماما مثل ذلك.

الاستنتاج العام


إذا كان لديك خلفية جيدة ، فما عليك سوى جمع ممثلين الجهاز (التطبيقات المثبتة ، والخدمات ، وأية بيانات حول الجهاز الذي يمكنك الحصول عليه) ومقارنة المعلمات الموجودة بالفعل ، واعتبر أن النسبة المئوية للتغييرات مقبولة.

ملاحظة: أنشر جميع المجموعات كما هو الحال دائمًا في قناة التلغراف @ paradisecurity ، ويمكن العثور على الرابط في ملفي الشخصي ، أو العثور عليه في البحث عن البرقيات بالاسم.

سعيد :)

Source: https://habr.com/ru/post/ar434726/


All Articles