Thursday, October 22, 2009

Facebook API - Facebook的應用程式授權機制(二)


如本文的系列一中所提到, 一個應用程式不論是否被User授權過(Allow), 該應用程式都會出現在User的應用程式清單中, 只要User於登入的狀態下瀏覽了該應用程式的Canvas Page. 一但你的App被使用者加入了應用程式清單之後, 往後只要User再次使用了你的App, 你所開發的App就可以取得許多與該User有關的資訊, 而且該User會被認定為App的活躍使用者(Active User). 不只如此, 只要該User的朋友於User的Profile上與App進行過互動, 該位User的朋友也會被認定為App的Active User, 整個App的擴散過程就是如此的病毒式.
那麼究竟User授權(Allow)我的App與否對身為開發者的我有何影響呢?
根據Facebook的Documentation所描述, 以下分別來討論





  • 情境一

    使用者瀏覽了你所開發的App的Canvas Page但是尚未對你的App進行授權.

    • App可以取得User的UID
    • App可以取得User所有朋友的UID
    • App可以呼叫任何不需要Session的Facebook API methods
    • 可以透過搜尋取得所有使用者公開的資訊
    • 可以透過User的UID取得使用者的Social Content
    • 開發者可以透過Feed Forms發佈Feed Stories給使用者
    • 開發者可以透過Request Forms代表使用者發送請求


  • 情境二

    使用者對你的App進行了授權(Allow)的動作

    • 每一次User與App互動時, Facebook會傳遞一個暫時的session key給App, 讓App可以透過該session key取得更多的使用者資料
    • 允許App透過Users.getStandardInfo取得資料進行分析,即使沒有Active Session
    • 開發者可以透過App的身分發送Notifications給User
    • 開發者可以透過Active Session以App使用者的身分發送Notifications給使用者的朋友們, 以及尚未成為朋友的其他App使用者
    • App開發者可以提示使用者增加App的整合點在他的Profile頁面上, App使用者也可以增加應用程式的頁籤在他的Profile頁面上
    • App Developer可以發送One Line Feed給App User
    • App user可以與App的Publisher進行緊密的互動, 所謂的Publisher請見下圖, 紅色框線框起來的部分就是iLike App的Publisher

      Facebook - Sean Liu_1256208805063 

      下圖紅色框線內就是App Worio的
      Publisher
      Facebook - Sean Liu_1256209069680
    • App Developer可以提示App User去開通Extended Permission給予App, 讓App能夠與User進行更深度的互動, 包括發送email給User, 允許App發送內容/評論/Like等訊息到User的Profile頁, 允許取得User的訊息串…等等諸多額外的互動.

  • 使用者如何進行對App的授權呢!?

    • 使用Facebook的Official PHP Client Libraries 

      <?php
      require_once('./facebook-platform/php/facebook.php');
      require_once('./facebook-platform/php/facebookapi_php5_restlib.php');

      $appapikey = '{App's API Key}';
      $appsecret = '{Application Secret}';
      $facebook = new Facebook($appapikey, $appsecret);
      $user = $facebook->require_login();
      ?>


    • 使用FBML
      <fb:if-is-app-user>
      <fb:else>
      <fb:redirect url="http://www.facebook.com/login.php?v=1.0&api_key={API Key}&next={登入後要到導向的URL}&canvas="/>
      </fb:else>
      </fb:if-is-app-user>

      不論採用何種方法, 將上述的程式碼擺在Canvas Page程式的最前頭, 假如使用者尚未登入, 則使用者會被導向要求登入的頁面, 若是以登入但尚未"Allow"對應用程式的授權, 則Facebook會將User導向執行"Allow"的頁面提醒User進行對App的授權.




  • 與App授權相關的App Settings

    Post-Remove Callback URL

    當User移除應用程式之後, Facebook會發出一個Request給此設定項中所設定的URL, App Developer可以接收POST變數中各項資訊進行後續的處理, POST變數包含下列資訊.

    array (
      'fb_sig_uninstall' => '1',
      'fb_sig_locale' => 'en_US',
      'fb_sig_in_new_facebook' => '1',
      'fb_sig_time' => '1256283323.6389',
      'fb_sig_added' => '0',
      'fb_sig_user' => '{移除App的使用者的UID}',
      'fb_sig_api_key' => '{App開發者的APP Key}',
      'fb_sig_app_id' => '{被移除的APP ID}',
      'fb_sig' => '5af69a2fdd2598b36d9cffc4fa42007e',
    )

    Post-Authorize Callback URL

    當User對App進行"Allow"之後, Facebook會發送POST Request到此URL, 接收到的POST變數中包含下列的資訊.


    array (
      'fb_sig_authorize' => '{只要被設定為1就代表User已經授權此App了}',
      'fb_sig_locale' => 'en_US',
      'fb_sig_in_new_facebook' => '1',
      'fb_sig_time' => '{UNIX時間戳記,紀錄User授權此App的時間}',
      'fb_sig_added' => '1',
      'fb_sig_profile_update_time' => '{User最後一次更新Profile的UNIX時間戳記}',
      'fb_sig_expires' => '{指示session何時過期的時間戳記,如果設定為0代表為永久不會過期,也表示User同意離線存取該應用程式}',
      'fb_sig_user' => '{移除App的使用者的UID}',
      'fb_sig_session_key' => '{}',
      'fb_sig_ss' => '{ss代表Session Secret,}',
      'fb_sig_ext_perms' => '{User所允許給予App的擴展權限( Extended Permission , ex:'auto_publish_recent_activity')}',
      'fb_sig_api_key' => '{被移除的APP ID}',
      'fb_sig_app_id' => '{被移除的APP ID}',
      'fb_sig' => '83fa8a680c5061b885de01ae670f9209',
    )

    Facebook - Edit demo_login_app_1256285135092

    Post-Authorize Redirect URL

    當User授權了你App之後, 你可以利用此設定將User重導向你想要讓使用者看見的頁面, 例如歡迎頁面或是新手上路等類型的頁面.

    Facebook - Edit demo_login_app_1256284991585













No comments:

Post a Comment