[TapChiLapTrinh]

Ra đời từ Tháng 2/2004, Facebook đã trở thành mạng xã hội lớn nhất thế giới với khoảng 1 tỷ người dùng. Facebook Platform phát hành vào Tháng 5/2007, cho phép các bên thứ ba viết các ứng dụng tích hợp với Facebook. Nền tảng này ban đầu đã hỗ trợ một loạt các ngôn ngữ lập trình (gồm cả Java) nhưng bây giờ nó chỉ cung cấp các bộ SDK nguyên gốc dành cho JavaScript và PHP (cũng như hỗ trợ cho các ứng dụng trên các hệ điều hành iOS và Android). Toàn bộ các phương thức giúp chúng ta truy cập vào cơ sở dữ liệu của Facebook như đăng nhập, lấy danh sách bạn bè, v.v.. được cung cấp dưới dạng Restful Webservice. Đặc biệt dịch vụ này của Facebook chỉ trả về JSON, không như các loại Restful Webservice khác thường hỗ trợ trả dữ liệu về dưới dạng XML và JSON. Vì vậy, để thuận tiện chúng ta sẽ sử dụng RestFB, một dự án mã nguồn mở dành cho Java.

Khi bạn tạo ứng dụng trên Facebook, mặc định nó hỗ trợ việc dùng Heroku (một nền tảng phát triển ứng dụng trên nền điện toán đám mây) để làm host cho ứng dụng của bạn. Tuy nhiên Heroku không hỗ trợ cho Java, vì vậy ở bài viết này tôi không hướng tới việc sử dụng Heroku với PHP, thay vào đó tôi sẽ sử dụng một nền tảng đã được giới thiệu trước đó trên Tạp chí Lập trình, đó là Google App Engine. Google App Engine (GAE) là một nền tảng dịch vụ (PaaS) cho phép các nhà phát triển đăng ký để chạy các ứng dụng mà họ viết bằng Python, Java hoặc Go trên hạ tầng của Google. Để đăng ký và sử dụng GAE bạn có thể xem lại bài “Google App Engine “ trên Tạp chí lập trình.

Bài viết này hướng dẫn bạn cách đăng ký một ứng dụng Facebook, phát triển nó bằng Java và triển khai miễn phí trên GAE, cung cấp cho bất kỳ người dùng Facebook nào (Lưu ý rằng Google giới hạn phần tài nguyên hàng tháng mà mỗi ứng dụng triển khai trên GAE có thể sử dụng).

Chúng ta sẽ xây dựng một ứng dụng đơn giản, ứng dụng này liệt kê tất cả các bạn bè của người dùng với ID và ảnh đại diện của họ trên Facebook. Để phát triển ứng dụng này, bạn cần:

Sau đây là các bước xây dựng ứng dụng kể trên.

Bước 1: Đăng ký ứng dụng trên GAE (tham khảo bài trước)

Bước 2: Đăng ký ứng dụng với Facebook

Trước tiên bạn vào trang https://developers.facebook.com/apps . Bạn click vào nút đăng ký: Register as a Developer.

Bạn cần đăng ký trở thành nhà phát triển ứng dụng Facebook, việc đăng ký sẽ yêu cầu xác thực số điện thoại của bạn bằng cách gửi mã về số điện thoại mà bạn cung cấp (hiện tại Facebook có hỗ trợ cho số mạng di động ở Việt Nam, nhưng bạn nên kiên nhẫn vì có thể sẽ hơi lâu mã mới gửi về điện thoại của bạn, trong trường hợp đợi lâu quá bạn có thể bỏ qua và sang bước 2)

Sau khi đã xác thực xong, bạn bấm vào “Create New App” để bắt đầu tạo một ứng dụng mới.

Lưu ý: không chọn “Web Hosting” vì chúng ta sẽ không sử dụng Heroku mà sử dụng GAE. Chú ý App Namespace là duy nhất.

Facebook sẽ cấp mỗi ứng dụng một App Id và App Secret, và sẽ sử dụng chúng để nhận biết ứng dụng của bạn. Tốt nhất bạn nên giữ chúng bí mật kẻo lọt vào tay kẻ sấu 😀

.

Bạn sẽ cần nhập một tên miền ứng dụng vào trường App Domains. Đây phải là tên miền GAE mà bạn đã đăng ký cho ứng dụng này trên trang GAE, vì vậy nó phải kết thúc bằng .appspot.com

Trong phần “Select how your app integrates with Facebook” (Chọn cách ứng dụng của bạn tích hợp với Facebook), hãy chọn “Website with Facebook Login” (Trang web có đăng nhập Facebook) và nhập vào URL của trang web có tên miền GAE mà bạn đã nhập trong hộp văn bản App Domains ở trên, URL cần bắt đầu với “http://”.  (Trong hình, tôi đã nhập http://haohaofptaptech.appspot.com)

Chọn “App on Facebook” (Ứng dụng trên Facebook) và nhập “Canvas URL” cho một servlet mà ứng dụng sẽ chạy trong đó. Với ứng dụng này, “Canvas URL” kết thúc bằng một dấu chấm hỏi để cho biết rằng các tham số cho ứng dụng này sẽ được chuyển giao thông qua URL gửi tới ứng dụng. “Secure Canvas URL” (URL của khung nền ảnh bảo mật) giống như “Canvas URL”, nhưng sử dụng https thay cho http. Một lần nữa, bạn cần thêm dấu hỏi ở cuối URL. (URL cho servlet của ứng dụng của tôi là “http:// haohaofptaptech.appspot.com/greet”, do đó, trong hình, tôi đã nhập “http:// haohaofptaptech.appspot.com/greet?” cho “Canvas URL” và https://haohaofptaptech.appspot.com/greet?” cho “Secure Canvas URL”).

Đó là tất cả những gì bạn cần làm để thiết lập một ứng dụng trên Facebook, nhưng tốt nhất là bạn nên cấu hình các thiết lập theo cách của bạn, chẳng hạn như biểu tượng của ứng dụng, category của nó.

Bước 3: Tạo ứng dụng bằng Eclipse và deploy lên GAE, tham khảo tại “Google App Engine”

Chú ý: Bạn sẽ cần thêm các thư viện đã download trên vào project của mình

  1. Yêu cầu chứng thực của Facebook

Khi người dùng Facebook lần đầu tiên vào ứng dụng của bạn, Facebook sẽ gửi một request bằng phương thức POST để yêu cầu chứng thực tới ứng dụng của bạn. Yêu cầu này chứa một dải tin được mã hóa 64-bit có chứa mã xác thực OAuth với ứng dụng này cho người dùng hiện tại, trong số các dữ liệu khác. Mã này được đưa vào dải tin của yêu cầu đó chỉ khi người dùng cho phép truy cập thông tin của họ. Bạn cần chuyển đổi nó thành đối tượng Java để ứng dụng có thể sử dụng nó. Bạn có thể giải mã dải tin này bằng Base64 có trong thư viện Apache Commons Codec.

[sourcecode language=”java”]
public static FacebookSignedRequest getFacebookSignedRequest(String signedRequest) throws Exception {
String payload = signedRequest.split("[.]", 2)[1];
payload = payload.replace("-", "+").replace("_", "/").trim();
String jsonString = new String(Base64.decodeBase64(payload.getBytes()));
return new ObjectMapper().readValue(jsonString, FacebookSignedRequest.class);
}
[/sourcecode]

(bạn có thể tham khảo code hoàn chỉnh được đính kèm ở cuối bài viết)

 

  1. Tạo một servlet để lấy danh sách bạn bè của người đang dùng ứng dụng

[sourcecode language=”java”]
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//lấy dải tin chứa mã xác thực trên request
String signedRequest = (String) request.getParameter("signed_request");
FacebookSignedRequest facebookSR = null;

//xác thực request
try {
facebookSR = FacebookSignedRequest.getFacebookSignedRequest(signedRequest);
} catch (Exception e) {
e.printStackTrace();
}

String oauthToken = facebookSR.getOauth_token();
PrintWriter writer = response.getWriter();

//Trong trường hợp mã xác thực không đúng đẩy sang trang báo lỗi của facebook
if(oauthToken == null) {
response.setContentType("text/html");
String authURL = "https://www.facebook.com/dialog/oauth?client_id="+ Constants.API_KEY + "&redirect_uri=https://apps.facebook.com/javathatdongian/&scope=";
writer.print("<script>top.location.href=’" + authURL + "'</script>");
writer.close();
}

//trong trường hợp mã xác thực đúng, bắt đầu gọi vào services của facebook.
//Ở đây đang gọi đến dịch vụ lấy friends của người đang dùng ứng dụng
else {
facebookClient = new DefaultFacebookClient(oauthToken);
Connection<User> myFriends = facebookClient.fetchConnection("me/friends", User.class);
writer.print("<table>");
writer.print("<tr><th>Photo</th><th>Name</th><th>Id</th></tr>");

for (List<User> myFriendsList : myFriends) {
for(User user: myFriendsList){
writer.print("<tr><td><img src="https://graph.facebook.com/" + user.getId() + "/picture"/></td><td>" + user.getName() +"</td><td>" + user.getId() + "</td></tr>");
}
}

writer.print("</table>");
writer.close();
}
[/sourcecode]

Lưu ý : Constants.API_KEY chính là api key mà Facebook cung cấp cho chúng ta.

Để biết chi tiết hơn từng dịch vụ mà Facebook cung cấp bạn có thể tham khảo tại trang web: https://developers.facebook.com/docs/reference/api/

Sau khi đã hoàn thành ứng dụng trên, bạn tiến hành deploy lên server GAE. Ứng dụng được biên dịch và được tải lên máy chủ, giờ đây bất kỳ người dùng Facebook nào cũng có thể cài đặt được ứng dụng này cho Facebook của mình theo địa chỉ “http://apps.facebook.com/APP ID/”.

Kết quả thực thi ứng dụng trên Facebook

 

Hy vọng với hướng dẫn trên bạn có thể tự tin phát triển và sáng tạo các ứng dụng khai thác sức mạnh của mạng xã hội Facebook.

Thế giới trên mây thật sự rất rộng lớn và còn ẩn chứa nhiều điều thú vị. Hành trình “dạo bước trên mây” sẽ vẫn còn tiếp tục trong các bài viết tiếp theo. Hẹn gặp lại.

Mã nguồn: http://www.mediafire.com/?k7tcy4gev4cubv9

 Lê Thị Hảo