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

قرار بود که بعد از منتشر شدن سرویس مهادل، در مورد ویژگی‌های اپ اندروید اون باز هم در ویرگول بنویسم. هدف اصلی و اولیه این سرویس هم، آموزش اندروید بود. ابتدا می‌تونید داستان ایجاد سرویس مهادل رو مطالعه کنید:

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 ایجاد شده


الان مقدار 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.