ورود با شبکه‌های اجتماعی - Android

در این مستند با نحوه‌ی ثبت‌نام و ورود کاربران، بدون نیاز به ثبت‌نام مستقیم در بکتوری و تنها با ورود به حساب کاربری گوگل خود، آشنا می‌شویم.

پیش‌نیازها

  1. در صورتی که با سرویس کاربران آشنایی ندارید، به معرفی سرویس کاربران مراجعه کنید.
  2. در صورتی که هنوز در پنل توسعه‌دهنده خود تنظیمات لازم برای سرویس کاربران را انجام نداده‌اید، به تنظیمات پنل مراجعه کنید.
  3. در صورتی که هنوز SDK اندروید را راه‌اندازی نکرده‌اید، به راه‌اندازی SDK بکتوری در اندروید مراجعه کنید.
  4. در صورتی که هنوز در کنسول توسعه دهندگان Google پروژه‌ای نساخته‌اید، به ساخت پروژه در کنسول توسعه دهندگان Google مراجعه کنید.

توجه: ورود با گوگل SDK بکتوری تنها در دستگاه‌هایی قابل استفاده است که برنامه Google Play Services را نصب داشته باشند. دستگاه‌هایی مانند Amazon Kindle Fire یا دستگاه‌هایی که کاربر این برنامه را در آنها disable یا uninstall کرده باشد،از این نوع‌اند. برای بررسی فراهم بودن این سرویس به بخش بررسی وجود Google Play Services مراجعه کنید.

راه اندازی

افزودن SDK به پروژه

درون فایل build.gradle ماژول برنامه‌تان (پیشفرض به نام app) در قسمت dependencies خط زیر را اضافه کنید.

compile 'com.pegah.backtory:backtory-google-login:0.6.6'  // put the latest version here

ساخت یک Android Client ID

هر apk برای نصب شدن در اندروید باید امضای دیجیتال شده باشد؛ حتی برنامه‌ای که با اندروید استودیو دیباگ می‌کنید، نیز، با کلید debugای که همراه اندروید استودیو می‌آید، امضا می‌شود. سرویس احراز هویت گوگل نیاز دارد که شما SHA-1 Hash کلیدی را که apk با آن امضا شده است، در پروژه کنسول گوگل در قالب یک Android OAuth Client وارد کنید (در نتیجه برای اینکه هر دو نسخه debug و release شما کار کند، باید دو Android Client ID بسازید.)

  1. برای ساخت یک Android Client ID به این‌جا رفته و پروژه خودتان را انتخاب کنید.
  2. بر روی دکمه Create credentials کلیک کنید و از منوی باز شده گزینه‌ی OAuth Client ID را انتخاب کنید.

    Google Create Credentials

  3. در صفحه‌ی جدید مورد Android را انتخاب کنید. یک نام دلخواه، SHA-1 Hash کلیدی که برنامه‌تان را با آن امضا کرده‌اید (اطلاعات تکمیلی را در این‌جا و این‌جا مطالعه کنید)، و نام بسته‌ی برنامه‌تان را وارد کنید و در آخر دکمه‌ی create را بزنید.

    Create Android Client Id

وارد کردن Web Client Id

  1. ابتدا یک client Id از جنس Web application طبق این مستندات ایجاد کنید.

  2. به این‌جا مراجعه کرده و پروژه مورد نظرتان را باز کنید. در بخش OAuth 2.0 client Ids، روی clientای که از جنس Web application است، کلیک کنید. (بنا بر نیاز خود می‌توانید چندین web client ایجاد کنید و لزومی بر استفاده از clientای که خود گوگل تولید کرده نیست. جزئیات oauth clientها از حوزه این مستند خارج است.)

  3. در صفحه جدید محتوای «Client ID» را کپی کنید.

    Copy Web Client Id

  4. به فایل AndroidManfiest.xml ماژول appتان بروی و درون تگ application یک تگ meta-data اضافه کنید. درون مشخصه‌های این تگ، قسمت value، Client ID را که در بخش قبل کپی کردید، قرار دهید.

     <meta-data android:name="server-client-id" android:value="<Client-ID>"/>
    

    اکنون تگ application شما باید چیزی شبیه این باشد.

    Android Manifest

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

در این مرحله اگر قصد دارید عملیات ورود را در یک Activity انجام دهید، از BacktoryGoogleLoginActivity ارث بری کنید؛ یا اگر قصد دارید در یک Fragment انجام دهید، از BacktoryGoogleLoginFragment ارث بری کنید. در زمان لازم (مثلا کلیک شدن یک دکمه) کافی است تکه کد زیر را فراخوانی کنید (کد زیر در یک Fragment اجرا ‌می‌شود.)

public class MyAppLoginFragment extends BacktoryGoogleLoginFragment {
    ...
    void loginWithGoogle() { // called on some button click
        getServerAuthCode(
            new GoogleAuthController.OnServerAuthCodeReceived() {

                @Override
                public void onReceivingAuthCode(String authCode) {
                    if (TextUtils.isEmpty(authCode))
                        Toast.makeText(AuthFragment.this.getContext(),
                                "cannot get auth code, wrong server-client-id maybe??",
                                Toast.LENGTH_SHORT).show();
                    else
                        BacktoryGoogleLogin.loginWithGoogle(
                                authCode, <BacktoryCallBack>);
                }
            });
    }
}

چنانچه از BacktoryGoogleLoginFragment استفاده می‌کنید، می‌بایست تابع onActivityResult مربوط به Activity در برگیرنده این Fragment را override کرده، درون آن اشاره گری به Fragment خود بیابید (مثلا از طریق FragmentManager) و تابع onActivityResult آن fragment را فراخوانی کنید. (این پیچیدگی ناشی از SDK لاگین خود گوگل است!)

Fragment f = // getSupportFragmentManager().findFragmentByTag("<My-Fragment-Tag>");
if (f != null)
    f.onActivityResult(requestCode, resultCode, data);
else
    super.onActivityResult(requestCode, resultCode, data);

چنانچه پاسخ سرور موفقیت آمیز باشد، درون callbackای که به تابع loginWithGoogle پاس می‌دهید، می‌توانید از ()BacktoryUser.getCurrentUser استفاده کنید.

نکته: پیشنهاد ما این است که حتی المقدور از کلاس‌هایی که SDK فراهم کرده، ارث بری کنید. در غیر این صورت، مسئولیت پیاده سازی این قابلیت به عهده‌ی خوتان است. به طور مثال با استفاده از مستندات گوگل خودتان serverAuthCode را گرفته و صرفا از تابع BacktoryGoogleLogin.loginWithGoogle برای ایجاد کاربر بکتوری استفاده کنید.

موارد دیگر

بررسی وجود Google Play Services

داخل BacktoryGoogleLoginFragment یا BacktoryGoogleLoginActivity تابع زیر را فراخوانی کنید.

isGoogleLoginAvailable()

به طور مثال می‎توانید در onCreate.Activity تان یا Fragment.onViewCreated بر اساس نتیجه این تابع دکمه ورود با گوگل را مخفی کنید.

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    if (!isGoogleLoginAvailable())
        googleLoginButton.setVisibility(View.GONE);
}

دکمه ورود با گوگل

sign-in-button

SDK احراز هویت گوگل دکمه‌ای با ظاهر استاندارد دارد که برای استفاده از آن، در فایل layout خود به صورت زیر عمل کنید. شکل این دکمه را در زیر می‌بینید. ( برای اطلاعات بیشتر به این‌جا مراجعه کنید.)

<com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:colorScheme="dark"
        app:buttonSize="standard" />

گام بعدی