12/08/2018, 16:28

Đăng nhập không cần password với Facebook Account Kit

Giới thiệu chung Account Kit giúp người dùng đăng ký và đăng nhập ứng dụng một cách nhanh chóng và dễ dàng bằng việc sử dụng số điện thoại hoặc địa chỉ email của họ làm thông tin đăng nhập không cần mật khẩu. Account Kit được hệ thống gửi SMS và email của Facebook hỗ trợ mang lại hiệu quả tin cậy ...

Giới thiệu chung

Account Kit giúp người dùng đăng ký và đăng nhập ứng dụng một cách nhanh chóng và dễ dàng bằng việc sử dụng số điện thoại hoặc địa chỉ email của họ làm thông tin đăng nhập không cần mật khẩu. Account Kit được hệ thống gửi SMS và email của Facebook hỗ trợ mang lại hiệu quả tin cậy và mở rộng với phạm vi tiếp cận toàn cầu. Do sử dụng xác thực bằng email và số điện thoại, Account Kit không yêu cầu tài khoản Facebook và là phương thức thay thế lý tưởng để đăng nhập mạng xã hội.

alt

alt

Account Kit được xây dựng cho thế giới của điện thoại di động, cung cấp các phiên làm việc lâu dài, dễ dàng quản lý tài khoản, và đặc biệt là không cần phải nhớ password.

Khi một người đăng nhật bằng email của họ, Account Kit sẽ gửi một liên kết một lần (one-time link) đến địa chỉ email của người đó. SDK sẽ xác định khi nào thì địa chỉa email đó được xác thực (verified).

Khi người dùng đăng nhập bằng số điện thoại của họ, Account Kit sẽ hoặc là gửi SMS có mã xác nhận tới số đó hoặc là xác thực trực tiếp số điện thoại (xem Xác minh nhanh)

Luồng đăng nhập đăng nhập của Accout Kit bao gồm cả đăng ký và đăng nhập tài khoản. Nên chúng ta không cần phải kiểm tra rằng tài khoản đã tồn tài hay là phải tạo một luồng mới để đăng ký user. Sau khi đăng nhập hoặc đăng ký thành công, Account Kit cung cấp cho ứng dụng của bạn thông tin đăng nhập xác thức của người dùng.

Android SDK cung cấp một activity và tất cả những gì chúng ta cần làm là khởi tạo và start activity đó. Activity cung cấp result tương ứng với đăng nhập thành công hay thất bại. Và bạn hoàn toàn có thể custom lại giao diện màn hình đăng nhập.

Account Kit hỗ trợ xác thực dựa trên SMS cho hàng trăm quốc gia. Để biết danh sách các mã quốc gia mà Accout Kit hồ trợ cho xác thực dựa trên SMS thì bạn hãy xem Mã quốc gia được hỗ trợ SMS. Hiện tại Facebook chưa thu phí dịch vụ nhắn tin SMS này cho đến 08/2018 . Sau thời điểm đó thì những ứng dụng mà vượt quá 100 000 SMS một tháng sẽ bị tính phí SMS tiêu chuẩn. Chi tiết tại đây.

Account Kit cũng hỗ trợ giao diện, tin nhắn SMS và emal xác thực cho rất nhiều ngôn ngữ khác nhau. Chi tiết về ngôn ngữ được hỗ trợ tịa đây.

Cách thức hoạt động của Account Kit

Account Kit tạo cơ sở dữ liệu cho ứng dụng. Bạn có thể truy xuất dữ liệu này bất cứ lúc nào thông qua REST API. Khi người dùng đăng nhập ứng dung, cơ sở dữ liệu này sẽ được cập nhật số điện thoại hoặc địa chỉ email cùng với Account IDs có thể sử dụng trong ứng dụng. Các Account IDs này là duy nhất cho ứng dụng của bạn. Nếu bạn cũng sử dụng Facebook Login cho ứng dụng của bạn thì bạn có thể yên tâm rằng sẽ không bao giờ có sự xung đột với ID của người dùng trong ứng dụng của Facebook.

Account Kit có 2 luồng đăng nhập, phụ thuộc vào việc người dùng chọn xác thực bằng số điện thoại hay là email.

Luồng xác minh bằng số điện thoại

  1. Gọi API Account Kit bằng số điện thoại để khởi tạo đăng nhập hoặc đăng ký.
  2. Server Account Kit sẽ gửi SMS kèm mã xác nhận để tiếp tục đăng nhập. Nếu người dùng không nhận được mã qua SMS, Account Kit cung cấp 2 tùy chọn dự phòng để người dùng lựa chọn:
  • Gọi điện thoại — Người dùng có thể chọn nhận cuộc gọi điện thoại để lấy mã SMS. Để biết danh sách ngôn ngữ mà hỗ trợ cuộc gọi, hãy xem danh sách Ngôn ngữ được hỗ trợ cho cuộc gọi điện thoại.
  • Thông báo trên Facebook — Nếu số điện thoại được liên kết với một tài khoản Facebook, người dùng có thể chọn nhận thông báo chứa SMS được gửi tới tài khoản đó. Account Kit cũng có thể xác minh trực tiếp số điện thoại mà không gửi mã SMS. Xem Xác minh nhanh.
  1. SDK xác minh mã xác nhận qua SMS.
  2. Nếu ứng dụng đã bật Luồng mã truy cập ứng dụng, ứng dụng của bạn sẽ nhận được mã truy cập chứa account ID sau khi đăng nhập thành công. Nếu ứng dụng chưa bật Luồng mã truy cập ứng dụng, ứng dụng của bạn sẽ nhận được mã ủy quyền mà server của ứng dụng có thể sử dụng để yêu cầu mã truy cập một cách an toàn.

Luồng xác minh bằng email

  1. Gọi API Account Kit bằng địa chỉ email để khởi tạo đăng nhập hoặc đăng ký.
  2. Server Account Kit sẽ gửi email xác nhận đến địa chỉ email.
  3. SDK giám sát trạng thái của email xác nhận.
  4. Nếu ứng dụng đã bật Luồng mã truy cập ứng dụng, ứng dụng của bạn sẽ nhận được mã truy cập chứa account ID sau khi đăng nhập thành công. Nếu ứng dụng chưa bật Luồng mã truy cập ứng dụng, ứng dụng của bạn sẽ nhận được mã ủy quyền mà server của ứng dụng có thể sử dụng để yêu cầu mã truy cập một cách an toàn.

Chi tiết Luồng mã truy cập ứng dụng tại Mã truy cập và Mã ủy quyền.

Xác minh nhanh

Nếu bạn sử dụng Facebook SDK ver 4.17 trở lên thì bạn có thể sử dụng xác minh nhanh số điện thoại. Nếu người dùng có tài khoản Facebook chứa số điện thoại họ nhập. Account Kit sẽ tự động xác minh ngay số này mà không cần họ nhập mã SMS theo cách thủ công.

Xác minh nhanh cũng có sẵn cho email với Facebook SDK 4.25 trở lên.

Để xác minh nhanh trên Android, người dùng phải đáp ứng điều kiện sau:

  • Có thiết bị đã cài đặt ứng dụng Facebook dành cho Android phiên bản 99 trở lên.
  • Có tài khoản Facebook bao gồm số điện thoại hoặc email họ nhập vào Account Kit.
  • Đăng nhập vào tài khoản đó.

Để ứng dụng của bạn hoạt động với tính năng xác minh nhanh trên Android, bạn phải thực hiện những điều sau:

  • Phát triển ứng dụng dành cho Android với phiên bản 4.17 trở lên của Facebook Android SDK đối với đăng nhập số điện thoại hoặc 4.25 trở lên đối với đăng nhập email
  • Nhập mã hash cho ứng dụng của bạn trong Bảng điều khiển ứng dụng. Xem Nhận ID ứng dụng Facebook trong phần "Điều kiện tiên quyết" của Account Kit dành cho Android.

Để thiết lập Account Kit trong ứng dụng Android, bạn hãy làm theo các bước sau:

  1. Điều kiện tiên quyết
  2. Cấu hình SDK
  3. Khởi tạo luồng đăng nhập cho SMS
  4. Khởi tạo luồng đăng nhập cho email
  5. Thực hiện cấu hình bổ sung
  6. Xử lý onActivityResult()
  7. Cung cấp nút đăng xuất
  8. Truy cập thông tin tài khoản trên thiết bị

Bạn cũng có thể xem project demo việc tích hợp Account Kit ở link Acount Kit Samples for Android trên GitHub.

1. Điều kiện tiên quyết

Trước khi bắt đầu tích hợp Account Kit vào ứng dụng, hãy đảm bảo bạn đã hoàn thành các điều kiện tiên quyết sau đây.

A. Tạo tài khoản nhà phát triển

Nếu bạn chưa có tài khoản nhà phát triển trên Facebook, hãy tạo một tài khoản. Tài khoản nhà phát triển Facebook cấp cho bạn quyền truy cập vào công cụ dành cho nhà phát triển và cho phép bạn tạo ứng dụng trên Facebook.

Nếu bạn đã có tài khoản nhà phát triển Facebook thì hãy chuyển tới bước tiếp theo.

B. Nhận ID ứng dụng Facebook

Account Kit cho Android yêu cầu ID ứng dụng Facebook. Hãy làm theo các bước trong Bắt đầu hoặc để sử dụng Bắt đầu nhanh, các bạn xem tại đây.

C. Chọn Cài đặt ứng dụng của bạn

Chọn xem có cho phép đăng nhập email và SMS không rồi chọn cài đặt bảo mật cho ứng dụng của bạn. Để biết thêm thông tin về cách chọn cài đặt mã truy cập các bạn xem tại đây.

2. Cấu hình SDK

Thêm Facebook app ID và Account Kit client token của bạn vào file AndroidManifest.xml. Bạn sẽ tìm thấy Account Kit client token ở trong phần Account Kit của App Dashboard. Tên ứng dụng sẽ được dùng trong giao diện màn hình đăng nhập.

Thêm implementation dependency với version mới nhất của Account Kit SDK vào file build.gradle:

repositories {
  jcenter()
}

dependencies {
  implementation 'com.facebook.android:account-kit-sdk:4.+'
}

Thêm đoạn dưới đây vào thẻ application của file AndroidManifest.xml. Các bạn lưu ý là FACEBOOK_APP_ID và ACCOUNT_KIT_CLIENT_TOKEN lấy từ dasboard của app bạn tạo trên account facebook developer mà mình đánh dấu đỏ như hình bên trên.

<meta-data android:name="com.facebook.accountkit.ApplicationName"
           android:value="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationId"
           android:value="@string/FACEBOOK_APP_ID" />
<meta-data android:name="com.facebook.accountkit.ClientToken"
           android:value="@string/ACCOUNT_KIT_CLIENT_TOKEN" />

<activity
  android:name="com.facebook.accountkit.ui.AccountKitActivity" />

AccountKitActivity cũng cần phải định nghĩa ở đây để cho phép chạy trong ứng dụng.

Để giảm kích thước của SDK bạn có thể chỉ định một số ngôn ngữ được hỗ trợ.

3. Khởi tạo luồng đăng nhập cho SMS

import com.facebook.accountkit.AccountKit;

public static int APP_REQUEST_CODE = 99;

public void phoneLogin(final View view) {
  final Intent intent = new Intent(getActivity(), AccountKitActivity.class);
  AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
    new AccountKitConfiguration.AccountKitConfigurationBuilder(
      LoginType.PHONE,
      AccountKitActivity.ResponseType.CODE); // or .ResponseType.TOKEN
  // ... perform additional configuration ...
  intent.putExtra(
    AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
    configurationBuilder.build());
  startActivityForResult(intent, APP_REQUEST_CODE);
}

Nếu người dùng đăng nhập tài khoản Facebook trên thiết bị Android của họ và có số điện thoại đã được xác minh, Account Kit sẽ xác minh họ mà không yêu cầu họ nhập mã SMS. Bạn có thể xem thêm Xác minh nhanh.

4. Khởi tạo luồng đăng nhập cho email

import com.facebook.accountkit.AccountKit;

public static int APP_REQUEST_CODE = 99;

public void emailLogin(final View view) {
  final Intent intent = new Intent(getActivity(), AccountKitActivity.class);
  AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
    new AccountKitConfiguration.AccountKitConfigurationBuilder(
      LoginType.EMAIL,
      AccountKitActivity.ResponseType.CODE); // or .ResponseType.TOKEN
  // ... perform additional configuration ...
  intent.putExtra(
    AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
    configurationBuilder.build());
  startActivityForResult(intent, APP_REQUEST_CODE);
}

Khi đăng nhập Account Kit bằng email, người dùng sẽ nhận email được gửi tới tài khoản của họ. Khi người dùng vào liên kết trong email trên cùng một thiết bị cài đặt ứng dụng của bạn, họ sẽ trở về ứng dụng để kết thúc hoạt động đăng nhập.

Để đưa người dùng trở về ứng dụng của bạn, hãy thêm AccountKitEmailRedirectActivity cùng với intent filter sau vào file AndroidManifest.xml

 <activity android:name="com.facebook.accountkit.ui.AccountKitEmailRedirectActivity">
   <intent-filter>
     <action android:name="android.intent.action.VIEW" />
     <category android:name="android.intent.category.DEFAULT" />
     <category android:name="android.intent.category.BROWSABLE" />
     <data android:scheme="@string/ak_login_protocol_scheme" />
  </intent-filter>
</activity>

Thêm như sau trong file strings.xml

// if your Facebook App ID is 1234567, you should use ak1234567
<string name="ak_login_protocol_scheme">akFACEBOOK_APP_ID</string>

5. Thực hiện cấu hình bổ sung

Đối tượng AccountKitConfigurationBuilder cung cấp thêm nhiều tùy chọn về hành vi và giao diện người dùng cho việc việc sử dụng Account Kit, do các option này khác nhiều và tài liệu cũng mô tả đầy đủ nên các bạn có thể tham khảo tạo đây.

6. Xử lý onActivityResult()

Trong onActivityReulst(), bạn tiến hành trích xuất AccountKitLoginResult từ đối số của Intent để xác định trạng thái của lần đăng nhập.

@Override
protected void onActivityResult(
        final int requestCode,
        final int resultCode,
        final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == APP_REQUEST_CODE) { // confirm that this response matches your request
        AccountKitLoginResult loginResult = data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
        String toastMessage;
        if (loginResult.getError() != null) {
            toastMessage = loginResult.getError().getErrorType().getMessage();
            showErrorActivity(loginResult.getError());
        } else if (loginResult.wasCancelled()) {
            toastMessage = "Login Cancelled";
        } else {
            if (loginResult.getAccessToken() != null) {
                toastMessage = "Success:" + loginResult.getAccessToken().getAccountId();
            } else {
                toastMessage = String.format(
                        "Success:%s...",
                        loginResult.getAuthorizationCode().substring(0,10));
            }

            // If you have an authorization code, retrieve it from
            // loginResult.getAuthorizationCode()
            // and pass it to your server and exchange it for an access token.

            // Success! Start your next activity...
            goToMyLoggedInActivity();
        }

        // Surface the result to your user in an appropriate way.
        Toast.makeText(
                this,
                toastMessage,
                Toast.LENGTH_LONG)
                .show();
    }
}

7. Cung cấp nút đăng xuất

Nếu đã bắt đầu phiên đăng nhập với AccountKitActivity.ResponseType.TOKEN, thì bạn sẽ có tùy chọn đăng xuất để xóa AccessToken đã lưu trữ khỏi thiết bị.

import com.facebook.accountkit.AccountKit;
...
AccountKit.logOut();

8. Truy cập thông tin tài khoản trên thiết bị

Nếu đã bắt đầu phiên đăng nhập với AccountKitActivity.ResponseType.TOKEN, thì bạn có thể truy cập ID Account Kit, số điện thoạiemail của tài khoản hiện tại qua lệnh gọi tới getCurrentAccount().

AccountKit.getCurrentAccount(new AccountKitCallback<Account>() {
  @Override
  public void onSuccess(final Account account) {
    // Get Account Kit ID
    String accountKitId = account.getId();

    // Get phone number
    PhoneNumber phoneNumber = account.getPhoneNumber();
    String phoneNumberString = phoneNumber.toString();

    // Get email
    String email = account.getEmail();
  }
  
  @Override
  public void onError(final AccountKitError error) {
    // Handle Error
  }
});

Về cơ bản thì các bạn chỉ cần như trên là có thể thực hiện đăng nhập không cần password với account kit. Ngoài ra thì Account Kit còn có thêm một số tùy chọn cho các bạn nếu bạn phải tùy biến. Nếu đi vào chi tiết các phần tùy chọn này thì sẽ khá mất nhiều thời gian nên mình sẽ chỉ ghi lại những phần chính, các bạn có thể tìm hiểu thêm.

Tùy chỉnh cấu hình

Một số tính năng của Account Kit SDK chỉ khả dụng khi mà một số quyền Android được cấp cho ứng dụng của bạn. Dù cho nó không bắt buộc để Account Kit có thể hoạt động, tuy nhiên nó cũng giúp giảm nhiều công sức cho quá trình đăng nhập. Chi tiết hơn về tùy chỉnh cấu hình.

Quyền trên Android đối với số điện thoại và SMS (tùy chọn)

Nếu người dùng đã cài đặt Dịch vụ của Google Play trên thiết bị, Account Kit có thể tự động điền số điện thoại và mã SMS của họ.

Tính năng email bổ sung (Tùy chọn)

  • Hiển thị danh sách các email khả dụng trên thiết bị.
  • Khởi chạy ứng dụng từ email Account Kit

Chỉ định ngôn ngữ được hỗ trợ (tùy chọn)

Nếu không cần bản địa hóa ứng dụng thành tất cả ngôn ngữ được Account Kit hỗ trợ, bạn chỉ có thể chỉ định ngôn ngữ mình muốn trong defaultConfig của build.gradle. Thao tác này sẽ xóa mọi chuỗi bản địa hóa không cần thiết và giảm dung lượng của ứng dụng.

defaultConfig {
  // Optional: Specify the language(s) your app supports.
  resConfigs "en", "fr", "vi"
}

ProGuard Rules

-keep class com.facebook.FacebookSdk {
   boolean isInitialized();
}
-keep class com.facebook.appevents.AppEventsLogger {
   com.facebook.appevents.AppEventsLogger newLogger(android.content.Context);
   void logSdkEvent(java.lang.String, java.lang.Double, android.os.Bundle);
}

Tùy chỉnh giao diện

Giao diện của các màn hình login được cung cấp bởi SDK. Các màn hình login được khởi chạy như là một Activity mới. Bạn hoàn toàn có thể tùy biến lại những màn này theo ý mình, có điều bạn nên tham khảo tài liệu hướng dẫn của Facebook về tùy chỉnh giao diện.

Acount Kit Samples for Android

https://developers.facebook.com/docs/accountkit

0