ورود با حساب‌کاربری گوگل در اندروید

قرار بود که بعد از منتشر شدن سرویس مهادل، در مورد ویژگی‌های اپ اندروید اون باز هم در ویرگول بنویسم. هدف اصلی و اولیه این سرویس هم، آموزش اندروید بود. ابتدا می‌تونید داستان ایجاد سرویس مهادل رو مطالعه کنید: https://virgool.io/@bkhezry/skill-swap-mahadel-qs9xzbyg275y خوبی ورود با حساب‌کاربری گوگل اینه که دیگه روند دریافت ایمیل، رمزعبور و تایید ایمیل رو حذف می‌کنه. از لحاظ امنیت هم چون رمزی از کاربر دریافت نمیشه، امنیت حساب‌کاربری شخص در اپلیکیشن، در گرو امنیت جیمیل اون است.عکس از گوگلگوگل برای ورود با حساب‌کاربری خودش دو راه حل در اندروید ارائه داده. یکی از اون‌ها قدیمی است و از ابتدای ایجاد این امکان، وجود داشته. این ورود با استفاده از Google play service و کتابخانه play-services-auth انجام میشه. لینک راهنماروش دیگه استفاده از Firebase و کتابخانه firebase-auth است که به نسبت روش اول جدیدتره. امکانات این کتابخانه بسیار از روش اول بیشتره. با استفاده از اون می‌تونید نه تنها با حساب‌کاربری گوگل ثبت‌نام کنید بلکه امکان استفاده از شبکه‌های اجتماعی دیگه همچون فیس‌بوک، توییتر و گیت‌هاب رو هم فراهم کرده. لینک راهنمامتاسفانه از ابتدای به وجود اومدن این امکان در Firebase ایران در لیست تحریم اون قرار داره و عملا نمیشه برای اپلیکیشن‌هایی که در ایران استفاده میشن از اون استفاده کرد #فناتحریمبرای استفاده از روش اول ابتدا به سایت توسعه گوگل مراجعه کنید و یک پروژه جدید برای اپلیکیشنتون ایجاد کنیدسایت توسعه گوگلبرای مثال من پروژه Skill Swap رو ایجاد کردم.برای استفاده از امکان ورود با حساب‌کاربری گوگل نیاز به Client ID دارید که گوگل به شما میده. برای این‌کار گزینه Credentials رو بزنید. در صفحه جدید بر روی Create credentials کلیک کنید و گزینه OAuth client ID رو انتخاب کنید. در صفحه جدید باز شده، شما باید دو مقدار Client ID ایجاد کنید. یکی Web application نام داره که مقدار اون در تولید توکن در اپ اندروید و اعتبارسنجی مقدار اون در بک‌اند استفاده میشه. مقدار دوم، اپلیکیشن شما رو با استفاده از SHA1 مربوط به کلید ساین و package name اون گوگل معرفی می‌کنه. چنانچه چندین کلید برای ساین اپلیکیشن دارید به ازای هر کدام باید یکClient ID ایجاد کنید. با این کار فقط اپلیکیشنی که در این بخش مقدار مربوط به SHA1 و package name اون ثبت شده باشه توکن اون معتبر خواهد بود.Client ID ایجاد شدهالان مقدار Client ID مربوط به نوع Web application رو کپی کنید تا در پروژه اندروید استفاده بشه. کد کامل بخش ورود با حساب‌کاربری گوگل در این لینک قابل دسترس است. https://gist.github.com/bkhezry/497c926fd517ad625d8a5103437d4042 مقدار Client ID گوگل رو با استفاده از تابع requestIdToken به GoogleSignInOptions ارسال کنید. با اضافه کردن این بخش، یک توکن با توجه به مقدار اون، توسط سرور گوگل برای شما ارسال می‌شه. https://gist.github.com/bkhezry/8d461c54de067327ef8376bd1261b76c مقدار توکن با استفاده از تابع getIdToken از شی GoogleSignInAccount دریافت میشه. اطلاعات این توکن برای حساب‌کاربری من در عکس پایین نمایش داده شده‌توکن ارسالی از سمت گوگلاین توکن برای یک ساعت معتبر بوده و شامل نام، نام‌خانوادگی، ایمیل و لینک عکس پروفایل شخص است. این مقدار باید توسط یک ارتباط امن https به سرور برای اعتبارسنجی و ذخیره ارسال بشه.تا اینجا برنامه اندروید به گوگل وصل شده و توکن حساب‌کاربری انتخاب شده رو دریافت و به سرور ارسال کرده. نکات این بخش:به ازای هر کلید ساین اپلیکیشن، باید یک Client ID تولید و مقادیر SHA1 و package name رو براش ثبت کنیمبرای درخواست و اعتبارسنجی توکن باید از مقدار Client ID مربوط به نوع Web application استفاده کنیمحتما از ارتباط امن با سرور برای ارسال توکن استفاده کنیمبرای اعتبارسنجی توکن ارسال شده به سرور می‌تونید از کتابخانه‌های آماده مربوط به زبان بک‌اند خودتون استفاده کنید. تعدادی از اون‌ها شامل پی‌اچ‌پی، پایتون و ... در این لینک در دسترس است. دقت کنید که مقدار Client ID درخواستی سرور هم باید با مقدار ثبت شده در اپلیکیشن اندروید یکی باشد یعنی همان مقدار نوع Web application.