Alif’s Weekly Ramblings

September 8, 2009

Membuat Aplikasi Flash Sederhana untuk Facebook

Filed under: Game Development — Tags: , , , — harsanalif @ 4:19 pm

Kalian pasti sudah tahu Facebook kan? Kalo belum, ke laut aja sana (becanda ding :D , buka aja http://www.facebook.com buat mengetahui lebih lanjut tentang situs social networking yang satu ini).

Pada tutorial ini, kita akan belajar membuat aplikasi Flash sederhana yang berkomunikasi dengan akun Facebook kita, dan mengambil data diri seperti biodata dan foto. Langsung saja kita mulai…

  1. Untuk membuat Flash berkomunikasi dengan Facebook, ada beberapa cara yang bisa kita gunakan. Tapi untuk tutorial kali ini, kita akan menggunakan Facebook Actionscript API, API official dari Adobe untuk berkomunikasi dengan Facebook yang bisa diunduh di http://code.google.com/p/facebook-actionscript-api/. Versi terakhir yang saya temui adalah versi 3.2, walau pada saat anda mencobanya kemungkinan sudah ada versi yang lebih baru.Dokumentasinya sendiri bisa kamu lihat disini http://facebook-actionscript-api.googlecode.com/svn/release/current/docs/index.html.

    Photobucket

    Seperti yang terlihat, ada dua tipe file yang bisa kita unduh dan gunakan, yaitu SWC dan Source. Saya akan mengunduh versi Source (facebook_library_v3.2_source.zip), lalu meng-extract isinya pada salah satu folder di komputer. Misalnya, C:/flash/facebook_api/ .

  2. Satu hal lagi yang perlu diperhatikan. Dalam membuat aplikasi Facebook, kita perlu mendaftarkan aplikasi tersebut terlebih dahulu pada akun Developer Facebook untuk mendapatkan SECRET KEY dan APP KEY yang vital digunakan untuk komunikasi data antara aplikasi dengan server Facebook. Untungnya, hal ini sangatlah mudah untuk dilakukan.
    1. Buka http://www.facebook.com/developers/. Bila Facebook menanyakan apakah anda mengijinkan aplikasi tersebut mengakses akun anda, pilih Allow.
    2. Bila sudah masuk pada halaman tersebut, tekan tombol + Set Up New Application di kanan atas.
    3. Photobucket

    4. Isi nama aplikasi yang ingin kamu buat, misal Beginning Feisbuk API, centang tanda persetujuan, lalu tekan tombol Simpan Perubahan. Perlu diperhatikan kalau nama aplikasinya tidak boleh mengandung kata ‘face’/'fb’ ato elemen kata yang bisa mengacu ke Facebook.
    5. Photobucket

    6. Bila berhasil, kamu akan dibawa masuk kedalam halaman Setting/Sunting aplikasi. Kamu hanya cukup memperhatikan dan mencatat Application Key/Kode API dan Secret Key/Rahasia. Bila sudah, kamu bisa langsung menekan tombol Kembali ke aplikasi saya pada bagian atas.

      Kita sudah bisa memulai mengembangkan aplikasi Flash yang kita inginkan.

  3. Photobucket

  4. Berikutnya kita mempersiapkan pengembangan aplikasinya menggunakan FlashDevelop. Buka FlashDevelop, lalu pilih Project -> New Project, lalu pilih AS3 Project. Beri nama project dengan BeginningFacebookAPI, lalu pilih lokasi project yang anda inginkan. Tekan Ok.

    Photobucket

    Pertama-tama kita perlu menambahkan library Facebook Actionscript API kedalam project ini. Pilih Project -> Properties.
    Pada layar setting BeginningFacebookAPI(AS3), pilih tab Classpaths, lalu klik tombol Add Classpath… Arahkan pada lokasi library Facebook Actionscript API, dalam hal ini di C:/flash/facebook_api/ . Tekan Ok.

    Photobucket

    Buka file Main.as yang ada di folder src pada panel Project.

    Photobucket

    Ketikkan script berikut untuk menggantikan semua script yang ada pada file Main.as tersebut.

    package
    {
    import com.facebook.Facebook;
    import com.facebook.events.FacebookEvent;
    import com.facebook.net.FacebookCall;
    import com.facebook.commands.users.GetInfo;
    import com.facebook.utils.FacebookSessionUtil;
    import com.facebook.data.FacebookLocation;
    import com.facebook.data.users.FacebookUser;
    import com.facebook.data.users.GetInfoData;
    import com.facebook.data.users.FacebookUserCollection;
    import com.facebook.data.users.StatusData;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.text.TextField;</li>
    </ol>
    public class Main extends Sprite
    {
    public const API_KEY:String = "";
    public const SECRET_KEY:String = "";
    public var fbook:Facebook;
    public var session:FacebookSessionUtil;
    public var flashvars:Object;
    
    public var userInfoTxt:TextField;
    public var loginTxt:TextField
    
    public function Main():void
    {
    initInterface();
    initFacebook();
    }
    
    public function initInterface():void
    {
    userInfoTxt = new TextField();
    addChild(userInfoTxt);
    userInfoTxt.width = 400;
    userInfoTxt.height = 300;
    userInfoTxt.selectable = false;
    userInfoTxt.multiline = true;
    userInfoTxt.wordWrap = true;
    userInfoTxt.text = "Please click 'Connect' button below after Allow the application.";
    
    loginTxt = new TextField();
    addChild(loginTxt);
    loginTxt.addEventListener(MouseEvent.CLICK, doneValidating);
    loginTxt.text = "CONNECT";
    loginTxt.border = true;
    loginTxt.selectable = false;
    loginTxt.width = 65;
    loginTxt.height = 20;
    loginTxt.x = 20;
    loginTxt.y = 40;
    }
    
    public function initFacebook():void
    {
    flashvars = this.root.loaderInfo.parameters;
    session=new FacebookSessionUtil(API_KEY, SECRET_KEY, this.root.loaderInfo);
    session.addEventListener(FacebookEvent.CONNECT, onConnect);
    fbook = session.facebook;
    
    if(flashvars.fb_sig_session_key != null)
    {
    session.verifySession();
    }else
    {
    session.login();
    }
    }
    
    public function doneValidating(event:MouseEvent):void
    {
    session.validateLogin();
    }
    
    public function onConnect(e:FacebookEvent):void
    {
    if(!e.success)
    {
    session.login();
    return ;
    }
    
    loginTxt.visible = false;
    getUserInfo();
    }
    
    public function getUserInfo():void
    {
    userInfoTxt.text = "Loading user info...";
    var call:FacebookCall = fbook.post(new GetInfo([fbook.uid], ['name', 'birthday', 'current_location', 'status']));
    call.addEventListener(FacebookEvent.COMPLETE, handleGetInfoResponse);
    }
    
    public function handleGetInfoResponse(e:FacebookEvent):void
    {
    if (e.success)
    {
    var user:FacebookUser = (e.data as GetInfoData).userCollection.getItemAt(0) as FacebookUser;
    var name:String = user.name;
    var brithdayDate:String = user.birthday;
    var currentLocation:FacebookLocation = user.current_location;
    var status:StatusData = user.status;
    
    userInfoTxt.htmlText = "Name: " + name;
    userInfoTxt.htmlText += "
    Birthday: " + brithdayDate;
    userInfoTxt.htmlText += "
    Location: " + currentLocation.city;
    userInfoTxt.htmlText += "
    Status: " + status.message + " at "+ status.time;
    }
    }
    }
    }
    

    Berikut penjelasan dari script diatas.

    public const API_KEY:String = "";
    public const SECRET_KEY:String = "";
    

    Constant dari API_KEY dan SECRET_KEY harus diisi dengan Application Key/Kode API dan Secret Key/Rahasia yang sudah kamu catat sebelumnya pada saat mendaftarkan aplikasi ke Facebook.

    Pertama kali, kita langsung inisialisasi interface dan koneksi Facebook. Inisialisasi interface yang dilakukan:

    public function initInterface():void
    {
    userInfoTxt = new TextField();
    addChild(userInfoTxt);
    userInfoTxt.width = 400;
    userInfoTxt.height = 300;
    userInfoTxt.selectable = false;
    userInfoTxt.multiline = true;
    userInfoTxt.wordWrap = true;
    userInfoTxt.text = "Please click 'Connect' button below after Allow the application.";
    
    loginTxt = new TextField();
    addChild(loginTxt);
    loginTxt.addEventListener(MouseEvent.CLICK, doneValidating);
    loginTxt.text = "CONNECT";
    loginTxt.border = true;
    loginTxt.selectable = false;
    loginTxt.width = 65;
    loginTxt.height = 20;
    loginTxt.x = 20;
    loginTxt.y = 40;
    }
    

    Cukup sederhana, kita membuat userInfoTxt yang berisi informasi dari proses koneksi yang sedang berlangsung, dan loginTxt yang dijadikan sebagai tombol sederhana untuk memulai koneksi.

    Pada function initFacebook() , kita melakukan inisialisasi dari Class-Class dasar dari Facebook AS3 API dan mencoba mengambil parameter fb_sig_session_key.

    public function initFacebook():void
    {
    flashvars = this.root.loaderInfo.parameters;
    session=new FacebookSessionUtil(API_KEY, SECRET_KEY, this.root.loaderInfo);
    session.addEventListener(FacebookEvent.CONNECT, onConnect);
    fbook = session.facebook;
    
    if(flashvars.fb_sig_session_key != null)
    {
    session.verifySession();
    }else
    {
    session.login();
    }
    }
    

    Perlu diingat, ada perbedaan dalam menjalankan aplikasi ini secara langsung di desktop atau melalui website Facebook dengan di-hosting terlebih dahulu. Bila menjalankan aplikasi secara normal di desktop atau alamat hosting langsung (menggunakan file SWF), maka Flash tidak akan menerima parameter fb_sig_session_key, dan harus melakukan login manual serta validasi ulang ke halaman Facebook menggunakan sebuah tombol (dalam kasus ini, loginTxt).
    Lain halnya bila aplikasi ini sudah di-hosting terlebih dahulu, parameter fb_sig_session_key akan langsung didapatkan, dan koneksi dengan Facebook akan berlangsung secara otomatis.

    public function doneValidating(event:MouseEvent):void
    {
    session.validateLogin();
    }
    
    public function onConnect(e:FacebookEvent):void
    {
    if(!e.success)
    {
    session.login();
    return ;
    }
    
    loginTxt.visible = false;
    getUserInfo();
    }
    

    Function doneValidating() digunakan untuk memvalidasi ulang koneksi ke Facebook bila pada inisialisasi awal koneksi gagal dilakukan (atau bila aplikasi Flash ini dijalankan di desktop/alamat hosting langsung).
    Function onConnect sendiri yang bertugas mengecek apakah proses koneksi berhasil atau tidak. Bila tidak sukses, akan memanggil session.login() (membuka halaman website Facebook), sedangkan bila sukses, tombol loginTxt akan dihilangkan, dan proses selanjutnya akan dijalankan (getUserInfo()).

    public function getUserInfo():void
    {
    userInfoTxt.text = "Loading user info...";
    var call:FacebookCall = fbook.post(new GetInfo([fbook.uid], ['name', 'birthday', 'current_location', 'status']));
    call.addEventListener(FacebookEvent.COMPLETE, handleGetInfoResponse);
    }
    

    Function getUserInfo() ini berfungsi membuat objek FacebookCall yang digunakan untuk memanggil command saat itu, yaitu mendapatkan informasi user (berdasarkan facebook id nya, dalam bentuk Array) yang antara lain nama, hari ulang tahun, lokasi, dan status terakhir. Bila pemanggilan berhasil dilakukan, hasilnya akan diproses pada penanganan event FacebookEvent.COMPLETE di function handleGetInfoResponse().

    Referensi dari jenis-jenis API yang tersedia ada pada http://wiki.developers.facebook.com/index.php/API. Kamu bisa mencari padanannya dalam Facebook AS3 API pada package com.facebook.commands (contohnya class GetInfo diatas).

    public function handleGetInfoResponse(e:FacebookEvent):void
    {
    if (e.success)
    {
    var user:FacebookUser = (e.data as GetInfoData).userCollection.getItemAt(0) as FacebookUser;
    var name:String = user.name;
    var brithdayDate:String = user.birthday;
    var currentLocation:FacebookLocation = user.current_location;
    var status:StatusData = user.status;
    
    userInfoTxt.htmlText = "Name: " + name;
    userInfoTxt.htmlText += "
    Birthday: " + brithdayDate;
    userInfoTxt.htmlText += "
    Location: " + currentLocation.city;
    userInfoTxt.htmlText += "
    Status: " + status.message + " at "+ status.time;
    }
    }
    

    Function handleGetInfoResponse() akan menangani hasil pemanggilan sebelumnya, dan berfungsi mencetak biodata diri user. Objek FacebookEvent yang diterima akan memiliki atribut ‘data’ yang formatnya sesuai dengan command GetInfo yang digunakan diatas, yaitu GetInfoData. Kamu bisa menemukan tipe-tipe data hasil atas setiap command pada package com.facebook.data.
    Kita mengambil atribut userColletion pada index pertama (0) karena kita hanya mengirimkan satu facebook id. Lain halnya bila kita mengirim banyak id sekaligus, maka kita perlu melakukan perulangan untuk mengambil biodata diri tiap user yang ada.

    Setelah aplikasi Flash tersebut selesai dibuat dan di-build tanpa error, maka kita perlu meng-hosting SWFnya dan mengatur ulang setting aplikasi tersebut di Facebook.

    1. Setelah meng-hosting file SWF yang dihasilkan, buka halaman http://www.facebook.com/developers/apps.php, pilih aplikasi yang sudah kamu daftarkan sebelumnya, lalu klik Edit Setting/Sunting Pengaturan.

      Photobucket

      Pilih sub menu Canvas/Kanvas, isi Canvas Page URL dengan alamat yang kamu inginkan, lalu isi Canvas Callback URL dengan alamat lokasi file SWF yang telah kamu hosting sebelumnya. Pastikan juga Metode Render yang terpilih adalah IFrame, opsi lainnya bisa dibiarkan default. Tekan tombol Simpan Perubahan.

      Photobucket

    2. Selesai sudah semua pengaturan yang diperlukan. Untuk melihat hasilnya, kamu bisa langsung membuka alamat website sesuai Canvas Callback URL yang telah diset pada langkah sebelumnya. Bila halamannya tidak terbuka/error, jangan panik dulu karena terkadang pengaktifan halaman aplikasi di Facebook memakan waktu beberapa menit sebelum aktif secara penuh.

    Hasilnya:

    Photobucket

    Demo game sederhana, judulnya kurang lebih ‘Do you know your friend’s FULL name?’:

    Photobucket

    File proyek:

      Selain Facebook AS3 API, ada beberapa metode lain yang bisa dipakai seperti komponen minimalis FacebookBridge (http://components.zerofractal.com/FacebookBridge/) atau lewat perantara Javascript+FBML dengan FBJS Bridge (http://wiki.developers.facebook.com/index.php/Fb:fbjs_bridge). Saya sendiri gak terlalu suka Facebook AS3 API karena dokumentasinya minim banget JSebagai tambahan, saya sarankan untuk membuat dua akun Facebook agar kita bisa berganti peran dengan cepat antara pengguna/pengembang, dan menemukan berbagai bug/trouble yang mungkin terjadi.

      Facebook sebagai platform gaming memang lumayan menarik untuk di-explore lebih lanjut. Sudah ada beberapa kisah sukses game-game online di Facebook yang sebagian diantaranya game Flash (seperti Who’s got the biggest brain, FarmTown, BarnBuddy, dll).

      Mungkin ada teman-teman yang tertarik untuk mencoba mengembangkan? Atau mungkin malah sudah pernah membuat game komunitas di Facebook? Sharing-sharing juga dong :D

    Reblog this post [with Zemanta]

17 Comments »

  1. Wah… bagus bener…
    sayang saya cuma nyasar kesini
    nggak ngerti apa-apa….
    mau ajari
    buat aplikasi yang sederhana
    Kalo boleh saran…
    1. Target proyek (mau bikin apa)
    2. Tujuannya apa aja
    3. Bahannya apa saja
    4. cara bikin paling mudah
    5. cara pasang
    6. contoh yang udah jadi

    apalagi kalau ada semacam kaya wizard….
    salut. semoga sukses

    Comment by dani — September 16, 2009 @ 3:31 am

    • Terima kasih banyak atas masukannya. Beberapa memang menurut saya cukup vital, dan akan saya usahakan revisi dalam waktu dekat :)

      Wah, kalo wizard agak lebih sulit lagi, tapi menarik juga untuk dicoba :D

      Comment by harsanalif — September 16, 2009 @ 3:59 am

    • Dani, kebetulan buku saya yang membahas pembuatan aplikasi Facebook sudah terbit.
      Disitu kamu bisa menemukan informasi yang jauh lebih terinci mengenai pembuatan aplikasi Facebook dan pemasangannya. Disertai juga CD berisi contoh aplikasi ;)
      Informasi buku: http://bukune.com/Komputer/Bengkel-Facebook/Detailed-product-flyer.html

      Comment by harsanalif — October 3, 2009 @ 2:28 am

  2. keren….
    saya lagi develop flash game…
    bisa mohon bantuan untuk diskusi supaya bisa di develop di fb?

    bole add ym nya?

    Comment by wira redi — November 1, 2009 @ 2:10 pm

  3. Mas, berguna banget mas, dan saya kebetulan berencana untuk mengembangkan aplikasi berbasis flash untuk penelitian / skripsi saya mas di facebook, mohon bantuannya mas,,add ymnya y mas,,

    Comment by Ahmad Wisnu Mulyadi — February 26, 2010 @ 3:38 pm

  4. mas. kuk di flash developku ngak ada AS3 project ya… gimana cara memulainya…

    please :: beda denga adobe/macromedia Flash nga’ ?????

    please :: mau tanya tanya

    Comment by diaz — March 16, 2010 @ 9:17 pm

  5. mantap mas.. hebat banget tp mo nanya neh untuk mbuat game berbasis flash semacam poker di facebook caranya gmna mas..?

    Comment by AYYUB — March 29, 2010 @ 9:30 am

    • Thanks Ayyub.
      Hehe, kalo spesifik kayak gitu sulit juga sih jelasinnya secara mendetail.
      Basically sih, kamu perlu bikin game Poker dulu yang buat Single Player. Kalo udah berhasil, coba terapkan fitur multiplayer (pakai SmartfoxServer, Electro Server, atau PlayerIO).
      Kalau multiplayer udah berhasil, sudah relatif mudah buat nerapin fitur2 Facebook didalamnya.
      Good luck.

      Comment by harsanalif — March 29, 2010 @ 2:08 pm

  6. Salam Kenal,
    Mas Saya Mau Naya Nih,Gimana ya caranya kita buat semacam lomba lewat facebook seperti contoh di bawah ini:
    http://www.facebook.com/pages/Lomba-Foto-Bintang-Anmum/306146216222#!/pages/Lomba-Foto-Bintang-Anmum/306146216222?v=app_4949752878
    trus disitu kita bisa daftar vote dan invite,
    mas kalo berkesempatan menjelaskan pada saya mohon infonya, soalnya saya mau buat semacam lomaba puisi dan tulisan jenaka githu..
    mas mohon bantuannya ya? kalo perlu bayar saya bayar dech..he..he
    terimakasih

    Comment by daunmudamanado — June 24, 2010 @ 7:10 pm

    • Salam kenal,
      Aplikasi seperti diatas memang cukup kompleks. Untuk daftar, vote, dan invite, perlu menggunakan database pada server side dan juga implementasi API nya menggunakan JavaScript/PHP.
      Maaf sekali, tapi saya kurang bisa membantu lebih detail mengenai hal ini karena spesialisasi saya di Flash development.
      Semoga membantu.

      Comment by harsanalif — June 25, 2010 @ 7:42 am

  7. mas kok pas build saya masih error yah

    Running process: C:\Program Files\FlashDevelop\Tools\fdbuild\fdbuild.exe “E:\tes\BeginningFacebookAPI\BeginningFacebookAPI.as3proj” -ipc afcaa169-5e40-4111-894c-c666a88b4be6 -compiler “E:\temp” -library “C:\Program Files\FlashDevelop\Library”
    Using the Flex Compiler Shell.
    Building BeginningFacebookAPI
    mxmlc -load-config+=obj\BeginningFacebookAPIConfig.xml -debug=true -incremental=true -benchmark=false -static-link-runtime-shared-libraries=true -o obj\BeginningFacebookAPI634132223130625000
    Incremental compile of 1
    Loading configuration file E:\temp\frameworks\flex-config.xml
    Loading configuration file E:\tes\BeginningFacebookAPI\obj\BeginningFacebookAPIConfig.xml
    Files changed: 0 Files affected: 1
    (fcsh)
    E:\tes\BeginningFacebookAPI\src\Main.as(80): col: 31 Error: Type was not found or was not a compile-time constant: FacebookEvent.
    public function onConnect(e:FacebookEvent):void
    ^
    E:\tes\BeginningFacebookAPI\src\Main.as(99): col: 43 Error: Type was not found or was not a compile-time constant: FacebookEvent.
    public function handleGetInfoResponse(e:FacebookEvent):void
    ^
    Build halted with errors (fcsh).
    Done(1)

    padahal itu saya udah pakai yang proyek punya mas T.T

    mhon bantuannya mas
    trm kasih

    Comment by snowrex — June 27, 2010 @ 1:14 am

  8. owhh sudah bisa ternyata salah tunjuk folder >.<
    tq

    Comment by snowrex — June 27, 2010 @ 1:32 am

  9. mas bisa mau nanyak nih..
    judul ap yg mantap buat skripsi pakai flash..
    klo bisa ada contohnya y mas
    tx

    Comment by sisilia — September 28, 2010 @ 3:35 pm

    • Hi Sisilia,
      Judul skripsi menggunakan Flash? Banyak :D
      Tapi ingat kalau Flash itu cuma tool, yang penting konsep/tema skripsnya.
      Yang menurutku beberapa yg cukup menarik seperti: Pengembangan Multiplayer Game Online dengan Flash, Teori dan Penerapan AI Pathfinding dalam game Flash, Penerapan Crowd Control AI untuk Game Strategi Flash, dll.

      Comment by harsanalif — September 30, 2010 @ 6:26 am

  10. coba try yg ini..

    http://apps.facebook.com/theclickandclick/

    Comment by deeg — June 28, 2011 @ 6:15 am


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Theme: Silver is the New Black. Blog at WordPress.com.

Follow

Get every new post delivered to your Inbox.