- Ionic 基礎教程
- Ionic - 首頁
- Ionic - 概述
- Ionic - 環境搭建
- Ionic CSS 元件
- Ionic - 顏色
- Ionic - 內容
- Ionic - 頁首
- Ionic - 頁尾
- Ionic - 按鈕
- Ionic - 列表
- Ionic - 卡片
- Ionic - 表單
- Ionic - 切換按鈕
- Ionic - 複選框
- Ionic - 單選按鈕
- Ionic - 範圍滑塊
- Ionic - 選擇框
- Ionic - 標籤頁
- Ionic - 網格
- Ionic - 圖示
- Ionic - 內邊距
- Ionic Javascript 元件
- Ionic - JS 動作面板
- Ionic - JS 背景
- Ionic - JS 內容
- Ionic - JS 表單
- Ionic - JS 事件
- Ionic - JS 頁首
- Ionic - JS 頁尾
- Ionic - JS 鍵盤
- Ionic - JS 列表
- Ionic - JS 載入
- Ionic - JS 模態框
- Ionic - JS 導航
- Ionic - JS 彈出框
- Ionic - JS 彈窗
- Ionic - JS 滾動
- Ionic - JS 側邊選單
- Ionic - JS 滑動框
- Ionic - JS 標籤頁
- Ionic 高階概念
- Ionic - Cordova 整合
- Ionic - AdMob
- Ionic - 相機
- Ionic - Facebook
- Ionic - 應用內瀏覽器
- Ionic - 原生音訊
- Ionic - 定位
- Ionic - 媒體
- Ionic - 閃屏
- Ionic 有用資源
- Ionic - 快速指南
- Ionic - 有用資源
- Ionic - 討論
Ionic - Cordova Facebook
此外掛用於連線 Facebook API。在開始整合 Facebook 之前,您需要建立一個 Facebook 應用在此。您將建立一個 Web 應用,然後跳過快速入門螢幕。然後,您需要在**設定**頁面新增網站平臺。在開發過程中,您可以使用以下程式碼片段作為站點 URL。
https://:8100/
之後,您需要在**設定/高階**頁面新增**有效的 OAuth 重定向 URI**。只需複製以下兩個 URL。
https://#/connect/login_success.html https://:8100/oauthcallback.html
安裝 Facebook 外掛
我們執行了上述所有步驟來解決使用此外掛時經常出現的一些問題。此外掛很難設定,因為涉及許多步驟,並且文件沒有涵蓋所有步驟。與其他 Cordova 外掛也存在一些已知的相容性問題,因此我們將在我們的應用程式中使用**Telerik 驗證的外掛**版本。我們將從命令提示符中向我們的應用程式安裝瀏覽器平臺開始。
C:\Users\Username\Desktop\MyApp>ionic platform add browser
接下來,我們需要做的是在**index.html**中**body**標籤的頂部新增**root**元素。
index.html
<div id = "fb-root"></div>
現在我們將 Cordova Facebook 外掛新增到我們的應用程式。您需要更改**APP_ID**和**APP_NAME**以匹配您之前建立的 Facebook 應用。
C:\Users\Username\Desktop\MyApp>cordova -d plugin add https://github.com/Telerik-Verified-Plugins/Facebook/ --variable APP_ID = "123456789" --variable APP_NAME = "FbAppName"
現在開啟**index.html**並在您的**body**標籤後新增以下程式碼。同樣,您需要確保**appId**和**version**與您建立的 Facebook 應用匹配。這將確保 Facebook SDK 非同步載入,而不會阻塞應用程式的其餘部分。
index.html
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '123456789',
xfbml : true,
version : 'v2.4'
});
};
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//#/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
Angular 服務
由於我們已經安裝了所有內容,因此我們需要建立一個服務,該服務將成為我們與 Facebook 的連線。這些操作可以在**控制器**中使用更少的程式碼來完成,但我們嘗試遵循最佳實踐,因此我們將使用 Angular 服務。以下程式碼顯示了整個服務。我們稍後會解釋它。
services.js
.service('Auth', function($q, $ionicLoading) {
this.getLoginStatus = function() {
var defer = $q.defer();
FB.getLoginStatus(function(response) {
if (response.status === "connected") {
console.log(JSON.stringify(response));
} else {
console.log("Not logged in");
}
});
return defer.promise;
}
this.loginFacebook = function() {
var defer = $q.defer();
FB.login(function(response) {
if (response.status === "connected") {
console.log(JSON.stringify(response));
} else {
console.log("Not logged in!");
}
});
return defer.promise;
}
this.logoutFacebook = function() {
var defer = $q.defer();
FB.logout(function(response) {
console.log('You are logged out!');
});
return defer.promise;
}
this.getFacebookApi = function() {
var defer = $q.defer();
FB.api("me/?fields = id,email", [], function(response) {
if (response.error) {
console.log(JSON.stringify(response.error));
} else {
console.log(JSON.stringify(response));
}
});
return defer.promise;
}
});
在上面的服務中,我們建立了四個函式。前三個是不言自明的。第四個函式用於連線到 Facebook 圖形 API。它將從 Facebook 使用者返回**id**和**email**。
我們正在建立**promise 物件**來處理非同步 JavaScript 函式。現在我們需要編寫我們的控制器來呼叫這些函式。為了更好地理解,我們將分別呼叫每個函式,但您可能需要將其中一些函式混合在一起以獲得所需的效果。
控制器程式碼
.controller('MyCtrl', function($scope, Auth, $ionicLoading) {
$scope.checkLoginStatus = function() {
getLoginUserStatus();
}
$scope.loginFacebook = function(userData) {
loginFacebookUser();
};
$scope.facebookAPI = function() {
getFacebookUserApi();
}
$scope.logoutFacebook = function() {
logoutFacebookUser();
};
function loginFacebookUser() {
return Auth.loginFacebook();
}
function logoutFacebookUser() {
return Auth.logoutFacebook();
}
function getFacebookUserApi() {
return Auth.getFacebookApi();
}
function getLoginUserStatus() {
return Auth.getLoginStatus();
}
})
您可能想知道為什麼我們沒有直接從函式表示式(前四個函式)返回**Auth**服務。這樣做的原因是您可能希望在返回**Auth**函式後新增更多行為。您可能會向資料庫傳送一些資料,在登入後更改路由等。這可以透過使用 JavaScript**then()**方法來處理所有非同步操作(而不是回撥)來輕鬆完成。
現在我們需要允許使用者與應用程式互動。我們的 HTML 將包含四個按鈕來呼叫我們建立的四個函式。
HTML 程式碼
<button class = "button" ng-click = "loginFacebook()">LOG IN</button> <button class = "button" ng-click = "logoutFacebook()">LOG OUT</button> <button class = "button" ng-click = "checkLoginStatus()">CHECK</button> <button class = "button" ng-click = "facebookAPI()">API</button>
當用戶點選**登入**按鈕時,將出現 Facebook 螢幕。登入成功後,使用者將被重定向到應用程式。