امکان ورود و ثبت‌نام در اپلیکیشن بدون نیاز به سرور ، با فایربیس

استاندارد

یکی دیگه از امکانات خیلی خوب و مفید پلتفرم فایربیس امکان انجام احراز هویت و ورود و ثبت‌نامه . این قابلیت به شما این امکان رو میده که بدون داشتن دغدغه پیاده‌سازی وب سرویس ، عملیات ورود و ثبت‌نام  رو برای اپلیکیشنتون پیاده‌سازی کنید . با کمک اینکار شما فقط کافیه تمرکز خودتون رو معطوف به پیاده‌سازی کلاینت کنید .
اما از معایب این سرویس هم باید گفت ، بزرگترین مشکل این سرویس برای ما ایرانی‌ها ست (مثل همیشه !!!) و اون مشکل اجازه ندادن ‌فایربیس برای استفاده از این سرویس در داخل ایرانه . یعنی اگه شما اپلیکیشنتون رو برای کاربران داخل ایران توسعه بدید و اگه کاربرانتون با ip های داخلی بخوان از سرویس‌های احراز هویت شما که توسط فایربیس پیاده شده استفاده کنند به مشکل بر میخورند . ولی خب اگه میخواید اپلیکیشنی با کاربر‌های هدف غیر ایرانی داشته باشید این مشکل بی معنی خواهد بود.
در ادامه روند پست قبل رو دنبال میکنیم و برای آشنایی با این سرویس یک مثال از اون رو با هم پیاده میکنیم . کاری که میخوایم در ادامه انجام بدیم ساخت یک اپلیکیشن با فرم‌های ورود ، ثبت‌نام و فراموشی رمزعبورر هست ، و برای انجام این عملیات‌ قصد داریم از سرویس‌هایی که فایربیس در اختیارمون میذاره استفاده کنیم .
فایربیس در سرویس احراز هویتش به ما علاوه بر امکان ثبت‌نام و ورود از طریق ‌ایمیل و پسورد ، امکان استفاده از حساب‌ کاربری شبکه‌های اجتماعی رو هم میده . حساب‌‌های کاربریی مثل فیسبوک ، توییتر ، گیت‌‌هاب ، گوگل .در صورت موفقیت آمیز بودن ورود ، شما به اطلاعات پایه کاربرتون دسترسی خواهید داشت .
عملکرد فایربیس به این صورته که در ابتدا شما اطلاعات مربوط به ورود یا ثبت‌نام رو از کاربر میگیرید و اون‌ها رو به Firebase Authentication SDK میفرسیتد و منتظر میمونید تا بعد از برسی و احراز هویت توسط فایربیس ، داخل اپلیکیشن پاسخ این برسی رو دریافت کنید .
در این مثال ما قصد داریم امکان ثبت‌نام و ورود از طریق ‌ایمیل و پسورد رو برای کاربرمون قرار بدیم .

مرحله اول

ابتدا باید از طریق این آدرس وارد پنل فایربیس بشید و یک پروژه بسازید . چگونگی انجام این کار رو در مرحله اول این پست میتونید بخونید .

مرحله دوم

وارد پنل فایربیس بشید و به صفحه مربوط به Auth برید و مطابق تصاویر زیر عمل کنید .
auth firebase tut1
Screen Shot 2016-08-11 at 3.54.54 PM
Screen Shot 2016-08-11 at 4.05.00 PMحالا میتونیم بریم سراغ پیاده‌سازی اپلیکیشنمون . به خواندن ادامه دهید

تغییر versionName اپلیکیشن اندرویدی در هر Build

استاندارد

این پست راجع‌به تغییر versionName برنامه به صورت اتوماتیکه ، یعنی چی ؟ یعنی میخوایم با هربار گرفتن خروجی از پروژه اندرویدیمون اسم ورژن اپلیکیشنمون رو تغییر بدیم .

خب شاید براتون این سوال پیش اومده باشه که اصن چرا ما باید یه همچین کاری رو انجام بدیم ؟
این کار به شما کمک میکنه وقتی تغییری توی اپلیکیشن اعمال میکنید و اون رو برای تست در اختیار کاربرانتون قرار میدین ، بتونید نظرات اون‌ها رو با توجه به نسخه اپلیکیشن برسی کنید .
این کار بیشتر در روند توسعه و تست‌هایی که توسط بتا تستر‌ها قبل از انتشار اپلیکیشن انجام میشه کاربرد داره .

برای انجام این کار در اندروید استدیو کافیه که فایل build.gradle مربوط به ماژول اصلی پروژتون‌ ( ماژول app ) رو باز کنید و  versionName داخل defultConfig رو مثل زیر تغییر بدید . همینطور تابع getDate رو به فایل build.gradle تون اضافه کنید .

کد بالا در هربار گرفتن خروجی از پروژه ، مقدار versionName رو برابر با ترکیب کلمه Beta و زمان گرفتن شدن خروجی قرار میده .
حالا تنها کاری که باید انجام بدین نمایش versionName توی اپلیکیشنه تا کاربرتون بتونه اون رو ببینه . مثلا در صفحه‌ اسپلش یا درباره ما .

چطوری خودمون رو از شر ساختن داده‌های Fake راحت کنیم ؟

استاندارد

یه چیز که خیلی خیلی من رو توی روند انجام پروژه‌ها اذیت میکرد همزمان نبودن پیاده‌سازی بخش کلایت و سرور بود . بطور مثال ما تو جلسات فنی ساختار داده‌ها و وب‌سرویسهایی که لازم بود رو با وب‌سرویس نویس مشخص میکردیم ولی به هر دلیلی این وب‌سرویس‌ها تو زمان پیاده‌سازی کلاینت‌ها آماده نمیشد یا با تاخیر آماده میشدند و این موضوع باعث این میشد که من برای پیاده‌سازی بخش‌هایی از کلاینت مجبور بشم تا توابعی رو در داخل اپلیکیشن بنویسم که داده‌های غیر واقعیی با ساختار درست و مشخص شده رو تولید کنه ، تا امکان تست اولیه کدهام در روند پیاده‌سازی رو داشته باشم .
چون این کار همیشه برای من جزو کارهای حوصله سر بر و کسل کننده بود ، باعث شد کمی جستجو کنم تا ببینم راه حلی برای انجام دادن این کار به صورت غیر حوصله سر بر هست یا نه . که خوشبختانه راه حلی به اسم JsonServer  وجود داشت .
JsonServer یک REST API برای تولید داده‌های غیر واقعیی بر روی localhost هست که با استفاده از یک فایل Json که بهش داده میشه کار میکنه . کافی این فایل Json دقیقا ساختار داده‌ای پروژه‌تون رو داشته باشه تا شما بتونید با توابع GET , POST , PUT , DELET , PATCH که json server در اختیارتون میذاره ، با صرف کمترین زمان از وب‌سرویس‌های مورد نظرتون داخل اپلیکیشنتون استفاده کنید . تو ادامه با یه مثال سعی میکنم نحوه عملکرد json server رو براتون بیشتر توضیح بدم .

اول بریم سر نصب این برنامه ، اگه با مک یا لینوکس کار میکنید و node رو روی سیستمتون ندارید ، برای قدم اول لازمه node روی سیستمتون نصب کنید .
دستور نصب node در ترمینال با پکیج منیجر homebrew برای مک : brew install node

بعد از اون میرسیم به نصب خود json-server ، برای این کار فقط کافی که تو ترمینالتون دستور زیر رو اجرا کنید و کمی هم صبر و تحمل به خرج بدید .
دستور نصب  npm install -g json-server  :  json server

خب بریم سر نحوه استفاده :

فرض کنید که برای موجودت‌های Profile و Products نیاز به یکسری وب‌سرویس داریم . فایل json به اسم db.json که در زیر نوشته شده ، شامل لیستی از چند Profile و یک لیست از Products ها هست .

کاری که ما  باید انجام بدیم اینه که این فایل رو به عنوان پارامتر به json-server بفرستیم تا اون بقیه کارا رو برای ما انجام بده . پس به دایرکتوریی که فایل json مون تو اون قرار داره میریم و دستور json-server db.json رو توی ترمینالمون اجرا میکینم . بعد از این مرحله میتونیم با استفاده از متد GET بر روی ادرس localhost:3000/profile لیست profile های مورد نظرمون رو دریافت کنیم . همچنین میتونیم با فرستادن شماره id در ریکوئست ، پروفایل مورد نظرمون رو در جواب دریافت کنیم  ، مثال localhost:3000/profile/1 . همینطور با استفاده از متدهای دیگه مثل ‌PUT , DELETE , POST هم میتونیم عملیاتهای اضافه ، حذف و تغییر رو بر روی داده‌های موجود تو فایل json مون اعمال کنیم . لازمه که این رو هم بگم که این تغییراتی رو که ما در فایل json به وسیله json-server اعمال میکنیم فقط در صورتی اعمال خواهند شد که قبل از بستن اون ، دستور s رو در ترمینال اجرا کنیم .

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

نکته : اگه از genymotion برای تست‌هاتون استفاده میکنید یادتون باشه به جای http://localhost:3000  از http://10.0.3.2:3000 استفاده کنید .