12/08/2018, 14:46

Tích hợp Facebook Login vào app Andorid bằng Facebook SDK

Tính năng đăng nhập bằng tài khoản facebook cung cấp cho người dùng một cách an toàn và tiện lợi để có thể đăng nhập và sử dụng app mà không cần phải mất nhiều thời gian để thực hiện việc đăng ký tài khoản trước tiên. Với việc sử dụng Facebook SDK cho Android thì việc cài đặt tính năng này cho app ...

Tính năng đăng nhập bằng tài khoản facebook cung cấp cho người dùng một cách an toàn và tiện lợi để có thể đăng nhập và sử dụng app mà không cần phải mất nhiều thời gian để thực hiện việc đăng ký tài khoản trước tiên. Với việc sử dụng Facebook SDK cho Android thì việc cài đặt tính năng này cho app chỉ mất vài phút. Việc sử dụng Facebook SDK giúp app có thể cung cấp các tính năng như chia sẻ trạng thái, hình ảnh, .. mà không cần phải có sẵn app Facebook trên thiết bị.

Lưu ý: Trước khi bắt đầu bài viết thì bạn cần có một tài khoản Facebook đã được xác thực.

Bạn tạo một project android facebook-sdk-samples có package name là com.quanda.fbsdk với MainActivity. java và layout activity_main.xml

Tất cả các ứng dụng mà dùng Facebook SDK cần phải đăng ký với Facebook. Bạn cần đăng nhập vào trang Facebook Developer

Lưu ý: Nếu bạn không nhìn thấy button Create App như trong hình mà là Register thì có nghĩa là tài khoản facebook của bạn chưa được xác thực. Bạn cần xác thực tài khoản bằng số điện thoại. Facebook sẽ gửi cho bạn mã xác nhận để xác thực số điện thoại đó.

Tiếp theo bạn chọn Create App

Bạn tiến hành điền Display Name, Contact EmailCategory phù hợp cho app của mình. Như trên hình thì tôi đã chọn ví dụ. Sau đó bạn nhấn chọn Create App ID. Sau đó bạn cần điền captcha để xác nhận bạn không phải là máy và xác nhận thông tin app.

Lưu ý: Facebook không cho phép chúng ta đặt tên có các cụm như Face, FB, Facebook, Instagram, .. liên quan đến các sản phẩm của họ nên bạn cần lựa chọn Display Name cho phù hợp.

Ở màn hình tiếp theo, bạn chọn Settings -> Basic ở menu bên trái, bạn sẽ thấy được App ID cảu ứng dụng, hãy note lại vì sau này bạn sẽ cần dùng ID này.

Sau đó bạn chọn Add Platform và thêm Android

Ở màn hình tiếp theo, bạn cần điền các thông tin về plarform Android như Google Play Package Name, Class Name, Key Hashes. Sau đó nhấn Save Changes để đăng kí platform.

  • Google Play Package Name: bạn có thể lấy trong Android Manifest ví dụ: package="com.quanda.fbsdk"
  • Class Name: là tên class bạn dự định sẽ tích hơp nút Login with Facebook ví dụ
  • Key Hashes: để có key bạn cần chạy đoạn code sau theo OS tương ứng

Terminal trên Ubuntu/ Mac

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Console trên Windows

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.androiddebug.keystore | openssl sha1 -binary | openssl base64

Trong ví dụ, sau khi chạy đoạn code ở Terminal trên Ubuntu, bạn sẽ có key hashes là chuổi gồm 28 kí tự. (Bạn có thể enter để bỏ qua keystore password)

Facebook SDK có ở trên Maven Central nên để sử dụng thì bạn cần thêm repository Maven Central vào file build.gradle của project, ngay trước dependencies {}

repositories {
    mavenCentral()
}

Sau đó thì bạn thêm phụ thuộc vào build.gradle của module app và sync lại project.

compile 'com.facebook.android:facebook-android-sdk:4.19.0'

Sửa Android Manifest

Bạn cần thêm request quyền sử dụng mạng để kết nối tới server facebook. Ngoài ra bạn cần thêm App ID lấy được khi đăng ký app trên trang Facebook Developer

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

<application
        ...
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>
</application>

string.xml

<string name="facebook_app_id">YOUR_FACEBOOK_APP_ID</string>

Sửa file layout

Bạn thêm một TextView để hiển thị các thông tin của tài khoản được dùng để login và một widget button để thực hiện login với facebook.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_awidth="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="@dimen/activity_vertical_margin"
    tools:context="com.quanda.fbsdk.MainActivity"
    >

    <TextView
        android:id="@+id/tv_info"
        android:layout_awidth="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        />

    <com.facebook.login.widget.LoginButton
        android:id="@+id/btn_login_facebook"
        android:layout_awidth="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        />
</LinearLayout>

Sửa file class

CallbackManager dùng để quản lý các callbacks sử dụng ở trong app

MainActivity.class

package com.quanda.fbsdk;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

public class MainActivity extends AppCompatActivity {

    private TextView mTvInfo;
    private LoginButton mBtnLoginFacebook;
    private CallbackManager mCallbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCallbackManager = CallbackManager.Factory.create();
        mTvInfo = (TextView) findViewById(R.id.tv_info);
        mBtnLoginFacebook = (LoginButton) findViewById(R.id.btn_login_facebook);

        mBtnLoginFacebook.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                mTvInfo.setText("User ID: " + loginResult.getAccessToken().getUserId() + "
" +
                        "Auth Token: " + loginResult.getAccessToken().getToken());
            }

            @Override
            public void onCancel() {
                mTvInfo.setText("Login canceled.");
            }

            @Override
            public void onError(FacebookException e) {
                mTvInfo.setText("Login failed.");
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        mCallbackManager.onActivityResult(requestCode, resultCode, data);
    }
}

Chạy thử

Mở app và thực hiện Continue with Facebook

Thực hiện đăng nhập account

Bạn sẽ thấy được user id và auth token của tài khoản mà bạn vừa đăng nhập

Các bạn có thể tham khảo source code ở đây https://github.com/dangquanuet/facebook-sdk-samples

Nguồn tham khảo https://code.tutsplus.com/tutorials/quick-tip-add-facebook-login-to-your-android-app--cms-23837

Ngoài ra để tìm hiểu thêm về các tính năng của facebook sdk thì các bạn có thể tham khảo các ví dụ trong repository sau do facebook thực hiện https://github.com/facebook/facebook-android-sdk

0