Đăng nhập để chơi game trên Facebook

The Web Games on Facebook and Facebook Gameroom platforms are no longer available for new submissions. This documentation is intended solely for developers with existing games. To learn more, read our blog post.

Khi xây dựng game để chơi trên Facebook.com là bạn đang xây dựng một ứng dụng web sẽ được phân phối trong vùng chứa iframe trên Facebook.com. Vì Facebook chỉ phân phối game cho người chơi đã đăng nhập nên chắc chắn người dùng của bạn sẽ đăng nhập vào Facebook để xác thực.

Do vậy, lúc nào bạn cũng cần hỗ trợ phương thức Đăng nhập bằng Facebook trong game của mình. Nhờ thế, bạn sẽ có một ID nhất quán để đồng bộ và kéo dài tiến trình của game, cũng như để triển khai các tính năng xã hội mà người chơi game mong đợi trong các game họ chơi. Nếu game của bạn có trên nhiều nền tảng, bạn có thể sử dụng chính ID này để đồng bộ trạng thái game cho người chơi trên các thiết bị mà họ sử dụng.

Tài liệu này trình bày các phương pháp khác nhau để sử dụng phương thức Đăng nhập bằng Facebook, cũng như cách bạn có thể tận dụng tối đa những phương pháp đó trong game của mình.

Nguồn xác thực

Người chơi có nhiều cách để xác thực lần đầu và một vài cách để xác minh danh tính sau khi xác thực lần đầu.

Xác thực trong Trung tâm ứng dụng

Khi khởi chạy game của bạn qua nút Chơi ngay trong Trung tâm ứng dụng, người chơi sẽ cấp cho ứng dụng của bạn một nhóm quyền cụ thể như được đặt cấu hình trên tab Chi tiết ứng dụng trong Bảng điều khiển ứng dụng.

Nút Chơi ngay trong Trung tâm ứng dụng

Giả sử phần lớn người chơi sẽ đến với ứng dụng của bạn qua Trung tâm ứng dụng thì đây sẽ là phương thức xác thực phổ biến. Để đảm bảo đăng nhập suôn sẻ từ Trung tâm ứng dụng, bạn cần đặt cấu hình nhóm quyền được cấp qua Trung tâm ứng dụng để khớp các quyền mà game của bạn yêu cầu trên Facebook.com và trên di động.

Hãy xem hướng dẫn về Trung tâm ứng dụng để biết thêm chi tiết.

Xác thức trên nền tảng khác

Nếu game của bạn có trên các nền tảng di động và hỗ trợ phương thức Đăng nhập bằng Facebook trong phiên bản di động, một số người chơi có thể đã được xác thực khi vào chơi game của bạn trên Facebook.com. Bạn cần phải đảm bảo rằng phiên bản game của mình trên Facebook.com yêu cầu cùng một nhóm quyền với game trên di động.

Phát hiện trạng thái đăng nhập

Như đã mô tả ở trên, người chơi sẽ đến với game của bạn ở trạng thái đã đăng nhập hoặc chưa đăng nhập, tùy thuộc vào việc họ từng xác thực game của bạn hay chưa - bằng cách chơi game đó trên Facebook trước đây, qua Trung tâm ứng dụng hay qua phiên bản di động của game.

Bạn có thể phát hiện xem một người chơi từng đăng nhập vào game của mình hay chưa theo một trong 2 cách sau đây:

  • Phía máy khách thì sử dụng phương thức FB.getLoginStatus() của JavaScript SDK
  • Phía máy chủ thì giải mã signed_request

Sử dụng Facebook SDK dành cho JavaScript

Bằng cách gọi FB.getLoginStatus() khi tải tài liệu, bạn có thể đảm bảo rằng người chơi đăng nhập ngay khi họ tải game. Sau đó, bạn có thể sử dụng FB.api() để xem trạng thái game của người chơi qua ID người dùng của họ, cũng như để truy xuất thông tin được dùng để cá nhân hóa, chẳng hạn như tên, ảnh đại diện và danh sách bạn bè của người chơi đó.

FB.getLoginStatus(function(response) {
  if (response.status === 'connected') {
    // the user is logged in and has authenticated your
    // app, and response.authResponse supplies
    // the user's ID, a valid access token, a signed
    // request, and the time the access token 
    // and signed request each expire
    var uid = response.authResponse.userID;
    var accessToken = response.authResponse.accessToken;
  } else if (response.status === 'not_authorized') {
    // the user is logged in to Facebook, 
    // but has not authenticated your app
  } else {
    // the user isn't logged in to Facebook.
  }
 }); 

Nếu người chơi chưa đăng nhập, bạn có thể gọi FB.login(...) để hiển thị phiên bản phương thức của hộp thoại đăng nhập ở đầu màn hình ban đầu của game. Lệnh gọi lại cho hộp thoại này phải giống với lệnh gọi phương thức mà bạn sử dụng khi gọi FB.getLoginStatus

Sử dụng yêu cầu đã ký

Khi Facebook.com tải game của bạn, hệ thống sẽ gửi yêu cầu HTTP POST đến URL Game trên web của Facebook mà bạn đã chỉ định. Yêu cầu POST này sẽ chứa một số thông số, trong đó có thông số signed_request mà bạn có thể dùng để xác thực.

signed_request được mã hóa base64url và ký bằng một phiên bản HMAC của Khóa bí mật của ứng dụng dựa trên quy cách OAuth 2.0.

Tức là khi yêu cầu POST được gửi đến ứng dụng của bạn, bạn sẽ phải phân tích cú pháp và xác minh yêu cầu đó thì mới có thể sử dụng. Việc này được thực hiện theo 3 bước:

  1. Tách yêu cầu đã ký thành 2 phần được phân định bằng ký tự '.' (ví dụ: 238fsdfsd.oijdoifjsidf899)
  2. Giải mã phần đầu tiên - chữ ký được mã hóa - từ base64url
  3. Giải mã phần thứ hai - phần tải dữ liệu - từ base64url rồi giải mã đối tượng JSON thu được

Bạn có thể thực hiện các bước này bằng bất kỳ ngôn ngữ lập trình hiện đại nào. Dưới đây là ví dụ bằng ngôn ngữ PHP:

function parse_signed_request($signed_request) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  $secret = "appsecret"; // Use your app secret here

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  // confirm the signature
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}

Yêu cầu này sẽ tạo đối tượng JSON có dạng như sau:

{
   "oauth_token": "{user-access-token}",
   "algorithm": "HMAC-SHA256",
   "expires": 1291840400,
   "issued_at": 1291836800,
   "user_id": "218471"
}

Bằng cách phân tích cú pháp thông số signed_request, bạn có thể phát hiện liệu người chơi hiện tại đã xác thực game của bạn hay chưa. Nếu người chơi đã xác thực, signed_request sẽ chứa ID người dùng của người chơi đó - bạn có thể sử dụng ID này để truy xuất thông tin cá nhân hóa và trạng thái game. Bạn có thể đổi signed_request này lấy mã truy cập và sử dụng mã đó để truy cập API Đồ thị nhằm cá nhân hóa sâu hơn.

Xác thực lần đầu

Trong lần đầu tiên người chơi đến với game của bạn, bạn nên mời họ xác thực bằng cách hiển thị Hộp thoại Đăng nhập. Đăng nhập phía máy khách qua Javascript SDK là quy trình đăng nhập nên dùng để xác thực. Nhà phát triển có thể hiển thị đồ họa game đơn giản trước khi khởi chạy hộp thoại đăng nhập và sau khi hủy hộp thoại này.

Happy Acres sử dụng nền tùy chỉnh khi đăng nhập

Đăng nhập phía máy khách qua Javascript SDK

Duy nhất đối với game trên Facebook, phiên bản JavaScript của Hộp thoại Đăng nhập sẽ được kích hoạt ở chế độ async trong iframe. Hộp thoại này sẽ hiển thị dưới dạng cửa sổ bật lên phương thức trên phần còn lại của nội dung game, chứ không hiển thị dưới dạng cửa sổ trình duyệt bật lên riêng biệt.

Điều này rất quan trọng vì bạn có thể gọi trực tiếp hộp thoại từ mã chứ không phải trong sự kiện giao diện người dùng mà không bị chặn bởi các phương thức phát hiện chặn cửa sổ bật lên của trình duyệt.

Do đó, bạn có thể sử dụng FB.getLoginStatus() để kiểm tra xem người chơi hiện tại đã từng xác thực game của bạn hay chưa. Nếu chưa, bạn cần hiển thị Hộp thoại Đăng nhập ở ngay đầu nội dung game bằng cách gọi FB.login() mà không cần hiển thị nút "Đăng nhập".

Hãy xem ví dụ bên dưới:

// Place following code after FB.init call.

function onLogin(response) {
  if (response.status == 'connected') {
    FB.api('/me?fields=first_name', function(data) {
      var welcomeBlock = document.getElementById('fb-welcome');
      welcomeBlock.innerHTML = 'Hello, ' + data.first_name + '!';
    });
  }
}

FB.getLoginStatus(function(response) {
  // Check login status on load, and if the user is
  // already logged in, go directly to the welcome message.
  if (response.status == 'connected') {
    onLogin(response);
  } else {
    // Otherwise, show Login dialog first.
    FB.login(function(response) {
      onLogin(response);
    }, {scope: 'email'});
  }
});

Các bước tiếp theo

Dù bạn chọn đăng nhập theo phương thức nào, việc có danh tính thực trong game sẽ giúp bạn tạo các tính năng xã hội tuyệt vời, qua đó có thể giữ chân người chơi và phân phối game của bạn.

Đăng nhập là bước đầu tiên sử dụng nhiều tính năng trong số này và bạn có thể tạo các tính năng đó bằng những sản phẩm bên dưới:

Hãy xem phần Cách làm tốt nhất dành cho game trên Facebook để biết thêm bí quyết về cách sử dụng hiệu quả phương thức Đăng nhập bằng Facebook trong game của bạn.