ورود با شبکههای اجتماعی - Android
در این مستند با نحوهی ثبتنام و ورود کاربران، بدون نیاز به ثبتنام مستقیم در بکتوری و تنها با ورود به حساب کاربری گوگل خود، آشنا میشویم.
پیشنیازها
- در صورتی که با سرویس کاربران آشنایی ندارید، به معرفی سرویس کاربران مراجعه کنید.
- در صورتی که هنوز در پنل توسعهدهنده خود تنظیمات لازم برای سرویس کاربران را انجام ندادهاید، به تنظیمات پنل مراجعه کنید.
- در صورتی که هنوز SDK اندروید را راهاندازی نکردهاید، به راهاندازی SDK بکتوری در اندروید مراجعه کنید.
- در صورتی که هنوز در کنسول توسعه دهندگان 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.7' // put the latest version here
ساخت یک Android Client ID
هر apk برای نصب شدن در اندروید باید امضای دیجیتال شده باشد؛ حتی برنامهای که با اندروید استودیو دیباگ میکنید، نیز، با کلید debugای که همراه اندروید استودیو میآید، امضا میشود. سرویس احراز هویت گوگل نیاز دارد که شما SHA-1 Hash کلیدی را که apk با آن امضا شده است، در پروژه کنسول گوگل در قالب یک Android OAuth Client وارد کنید (در نتیجه برای اینکه هر دو نسخه debug و release شما کار کند، باید دو Android Client ID بسازید.)
- برای ساخت یک Android Client ID به اینجا رفته و پروژه خودتان را انتخاب کنید.
-
بر روی دکمه Create credentials کلیک کنید و از منوی باز شده گزینهی OAuth Client ID را انتخاب کنید.
-
در صفحهی جدید مورد Android را انتخاب کنید. یک نام دلخواه، SHA-1 Hash کلیدی که برنامهتان را با آن امضا کردهاید (اطلاعات تکمیلی را در اینجا و اینجا مطالعه کنید)، و نام بستهی برنامهتان را وارد کنید و در آخر دکمهی create را بزنید.
وارد کردن Web Client Id
-
ابتدا یک client Id از جنس Web application طبق این مستندات ایجاد کنید.
-
به اینجا مراجعه کرده و پروژه مورد نظرتان را باز کنید. در بخش OAuth 2.0 client Ids، روی clientای که از جنس Web application است، کلیک کنید. (بنا بر نیاز خود میتوانید چندین web client ایجاد کنید و لزومی بر استفاده از clientای که خود گوگل تولید کرده نیست. جزئیات oauth clientها از حوزه این مستند خارج است.)
-
در صفحه جدید محتوای «Client ID» را کپی کنید.
-
به فایل AndroidManfiest.xml ماژول appتان بروی و درون تگ application یک تگ meta-data اضافه کنید. درون مشخصههای این تگ، قسمت value، Client ID را که در بخش قبل کپی کردید، قرار دهید.
<meta-data android:name="server-client-id" android:value="<Client-ID>"/>
اکنون تگ application شما باید چیزی شبیه این باشد.
ورود با حساب کاربری گوگل
در این مرحله اگر قصد دارید عملیات ورود را در یک 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);
}
دکمه ورود با گوگل
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" />