Facebook前置作業:create Facebook App
以OAuth登入前,必須先在Facebook建立對應的App。步驟簡述如下:- 登入FB,前往「管理應用程式」頁面(https://developers.facebook.com/)。
- 選取My Apps / Add a New App,接著在跳出的頁面裡選擇「WWW網站」類型。
- 輸入App名稱,接著點擊「Create New Facebook App ID」。
- 根據你的App性質選擇一個類別,再點選「Create App ID」
- 在Tell us about your website下Site URL, Mobile Site URL都輸入 http://localhost:8100/ 。
- 回到My Apps下新建App,選擇側欄選單Settings,在App Domains下輸入localhost。最後複製App ID的內容。此ID將作為ngCordova OAuth程式呼叫的參數。
圖1.App類型選擇WWW網站
|
圖2.自選類別,再Create App ID |
圖3. Website, App Domains的設定攸關Ionic App能否順利取得FB登入授權。 |
步驟5,6的設定攸關後續開發的Ionic apps是否能順利取得FB登入授權。
建立Ionic專案!
FB App建好之後,請先建立Ionic專案,並切換到專案資料夾,因為後續的ngCordova OAuth等外掛是安裝在專案內:
ionic start FBOAuth blank cd FBOAuth
安裝ngCordova OAuth與InAppBrowser外掛
為了完成FB OAuth登入,必須先安裝ngCordova OAuth Plugin。根據ngCordova OAuth Plugin正式文件說明此外掛需要:
- Apache Cordova 3.5以上版本。
- Apache Cordova InAppBrowser Plug-in
- 部分服務登入驗證(如Twitter)還需要加裝jsSHA函式庫。
通常安裝的Apache Cordova版本為4.X版,可在cmd下以
inAppBrowser安裝好之後,便可安裝ngCordova OAuth(若bower未安裝,還必須先以npm安裝bower):
使用bower成功安裝ngCordova OAuth之後,會出現www/lib/ng-cordova-oauth資料夾。請在index.html加入引用ng-cordova-oauth.js(或ng-cordova-oauth.min.js):
cordova --version確認之。安裝InAppBrowser外掛,則需輸入:
cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git至於jsSHA因FB並不需要,如有需要安裝,請參考jsSHA。
inAppBrowser安裝好之後,便可安裝ngCordova OAuth(若bower未安裝,還必須先以npm安裝bower):
npm install -g bower bower install ng-cordova-oauth -S如果執行bower install出現"ENOGIT git is not installed..."錯誤訊息,則還必須進一步安裝Git for Windows (https://msysgit.github.io/)(在Windows作業環境下)。
使用bower成功安裝ngCordova OAuth之後,會出現www/lib/ng-cordova-oauth資料夾。請在index.html加入引用ng-cordova-oauth.js(或ng-cordova-oauth.min.js):
<script src="lib/ng-cordova-oauth/ng-cordova-oauth.min.js">同時js/app.js內則要注入ngCordovaOauth:
angular.module('starter', ['ionic', 'ngCordovaOauth'])之後便可使用$cordovaOauth服務進行登入授權。
以$cordovaOauth進行FB登入授權
ngCordova Oauth外掛提供$cordovaOauth.facebook('你的App ID', appScope, options)的方式登入。appScope指的是FB的授權項目,請參考FB Permissions。最基本的授權項目有三項:email, user_friends, public_profile。因此實際用法如:
.controller('OauthCtrl', function ($scope, $cordovaOauth) { // ...[略]... $cordovaOauth.facebook('14399XXXXXXXXXXX', ["email", "user_friends", "public_profile"]) .then(function(result)...[略]...下面便以實際範例說明FB OAuth的使用方式。
範例:以OAuth登入授權讀取FB個人資料
範例包含兩個頁面:login.html提供登入畫面,其controller以$cordovaOauth.facebook()啟動登入授權動作。登入授權成功,會取得accessToken,後續以Facebook Graph API讀取FB資料時,必須提供此accessToken;將accessToken儲存起來後,便轉往第2個頁面feed.html。由於程式持續使用accessToken進行FB資料存取,因此此處特別使用ngStorage外掛,建立local儲存空間。feed.html則顯示FB個人動態貼文內容。貼文內容必須以Facebook Graph API的/me/feed取得;另外,登入者的個人資料則是透過Graph API的/me取得。兩個Graph API call都在feed.html的controller內完成。儲存資料所需:安裝ngStorage
ngStorage用來建立local storage,存取方法簡單,非常適合用來儲存共用資料。其安裝與使用方式與上述ngCordova Oauth外掛雷同,一樣透過bower安裝
bower install ngstorage也會在專案內建立www/lib/ngstorage資料夾。同樣在index.html要加入該資料夾內的js檔,例如:
<script src="lib/ngstorage/ngStorage.min.js">
在使用時也需注入ngStorage
angular.module('starter', ['ionic', 'ngCordovaOauth','ngStorage'])
最後在程式中再以$localStorage存取資料,存取方式可參考ngStorage或後續js/app.js。
js/app.js
- 第1行:注入ngCordovaOauth與ngStorage。
- 第16-27行:以$cordovaOauth.facebook()進行登入授權。此處設定email, user_friends, public_profile三個基本權限。此處會帶出FB登入畫面,登入成功則會詢問同不同意授權。點選同意後,會先將FB回傳的access_token儲存在$localStorage.accessToken內,接著轉往下一個畫面(即執行第22行轉至/feed)。
- 第30-50行:使用Facebook Graph API的/me/feed取得登入者的動態。傳送時必須附上access_token (第32行)。成功的話,第38行繼續送出Graph API的/me,讀取登入者的大頭貼(第41行 field: "picture")。
程式執行畫面如下:
其餘檔案如下。其中login.html使用了css/style.css的設定,目的是為了按鈕垂直置中,故在css/style.css內修改了.scroll-content, .scroll兩個css classes之設定。
圖4.OAuth機制帶出FB登入畫面與授權畫面,最後程式顯示以自訂格式顯示從FB讀取的個人動態。 |
沒有留言:
張貼留言