مزین کردن اپلیکیشن‌ اندرویدیتون به رمزعبور

استاندارد

چند روز پیش یکی‌ از دوستانم ازم پرسید ، تاحالا شده واسه اپلیکیشن‌هایی که توسعه دادی این امکان رو بذاری که کابر بتونه برای وارد شدن به اپلیکیشن پسورد ست کنه !؟

جواب من در ابتدا نه بود ! ولی‌ از اونجایی که سوال جالبی‌ بود، دست به کد شدم و انجامش دادم ، بعدش گفتم پست وبلاگیش کنم شاید به درد آدمای دیگه‌ای هم خورد.

locked-doors

خب قبل از هر چیز بیاین یه بار دیگه مسئله رو به صورت دقیقتر برسی کنیم.

کاری که ما قراره انجام بدیم اینه که به کاربر امکان ست کردن رمزعبور برای اپلیکیشن رو بدیم و بعد از اون هر زمانی که کاربر از اپلیکیشن خارج شد ، برای ورود مجدد ازش تقاضای وارد کردن رمزعبور کنیم . پس در قدم اول باید بفهمیم که کاربر چه زمانی اپلیکیشن رو ترک کرده و با ذخیره کردن یه flag نشون بدیم که کاربر از اپلیکیشن خارج شده ، در زمان بازگشت کاربر بتونیم اونو به صفحه وارد کردن رمزعبور بفرستیم .

اما نکته مهم اینجاس که متاسفانه اندروید برخلاف IOS ، مستقیما به ما دسترسیی نمیده که با  اون بتونیم چک کنیم که آیا اپلیکیشن ما به حالت background (خارج شده) رفته یا نه ! این مشکل خودش رو زمانی نشون میده که کاربر با استفاده از دکمه Home یا دکمه Recent Application از اپلیکیشن خارج بشه و برنامه کاملا از memory خارج نشده باشه . پس تنها راهی که میمونه اینه که خودمون یجوری این موضوع رو متوجه بشیم .

برای انجام این کار میتونیم از ActivityLifecycleCallbacks کمک بگیریم و به وسیله اون تعداد دفعات شروع (start) و پایان (stop) تمام Activityهای اپلیکیشنمون رو بدست بیاریم و بعد از محاسبه هرجا که تعداد شروع‌ها بیشتر از تعداد پایان‌ها بود یعنی‌ اپلیکیشن ما به اصطلاح در foreground هست یا به زبان دیگه کاربر درحال کار با اپلیکیشنه. و اگه مقدار شروع ها بیشتر یا مساوی تعداد پایان‌ها بود اپلیکیشن در حالت background خواهد بود . تو کد زیر کلاس MyLifecycleHandler  رو نوشتم که توی اون تابع isApplicationVisible دقیقا همین کار رو انجام میده .

توی کلاس بالا داخل تابع onActivityStopped چک میکنم که آیا اپلیکیشن به حالت background میره یا نه ! و در صورتی که به background میرفت به وسیله SharedPreferences یه flag به اسم isAppLeaved رو ذخیره میکنیم . تا در صورت باز شدن دوباره اپلیکیشن و صدا شدن تابع onActivityStarted با چک کردن اون و درصورت true بودن مقدار isAppLeaved ، کاربر رو به صفحه دریافت رمزعبور بفرستیم .

و در آخر هم لازمه که کلاس MyLifecycleHandler  رو برای اپلیکیشنمون ‌ست کنیم . پس یه کلاس میسازیم به اسم MApplication و از Application ارث بری می‌کنیم ، و بعد در متد onCraete کد زیر رو قرار میدیم .

حتما حواستون باشه توی فایل AndroidManifest پروژتون اسم MApplication رو قرار بدین .

خب کار تمومه .

کدهای بالا بخشی از اپلیکیشن sample ای هست که توی گیت‌هاب قرار دادم . اگه خواستید میتونید  از اینجا اپلیکیشن sampleرو دریافت کنید .

لازم به ذکره ، راه حل بالا برای آندروید ۱۴ به بالا جواب میده .

1 دیدگاه در “مزین کردن اپلیکیشن‌ اندرویدیتون به رمزعبور

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *