- 离子基础教程
 - 离子 - 主页
 - 离子 - 概述
 - Ionic - 环境设置
 
- Ionic CSS 组件
 - 离子 - 颜色
 - 离子 - 内容
 - 离子 - 标头
 - 离子 - 页脚
 - 离子 - 按钮
 - 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 - Cordova 集成
 - 离子 - AdMob
 - 离子 - 相机
 - 离子 - Facebook
 - Ionic - 在应用程序浏览器中
 - Ionic - 原生音频
 - 离子 - 地理定位
 - 离子 - 媒体
 - Ionic - 启动画面
 
- 离子有用资源
 - 离子 - 快速指南
 - 离子 - 有用的资源
 - 离子 - 讨论
 
Ionic - 科尔多瓦 Facebook
该插件用于连接 Facebook API。在开始集成 Facebook 之前,您需要在此处创建一个 Facebook 应用程序。您将创建一个 Web 应用程序,然后跳过快速启动屏幕。然后,您需要在设置页面添加网站平台。在开发过程中,您可以使用以下代码片段作为站点 URL。
http://localhost:8100/
之后,您需要在设置/高级页面上添加有效的 OAuth 重定向 URI。只需复制以下两个网址即可。
https://www.facebook.com/connect/login_success.html http://localhost:8100/oauthcallback.html
安装 Facebook 插件
我们执行了上述所有步骤来解决使用此插件时经常出现的一些问题。该插件很难设置,因为涉及很多步骤,并且文档并未涵盖所有步骤。其他 Cordova 插件也存在一些已知的兼容性问题,因此我们将在我们的应用程序中使用Teleric 验证的插件版本。我们将从命令提示符将浏览器平台安装到我们的应用程序开始。
C:\Users\Username\Desktop\MyApp>ionic platform add browser
接下来,我们需要做的是将根元素添加到index.html中的body标记之上。
索引.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和版本与您创建的 Facebook 应用程序匹配。这将确保 Facebook SDK 异步加载,而不会阻塞应用程序的其余部分。
索引.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 = "//connect.facebook.net/en_US/sdk.js";
      fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'facebook-jssdk'));
</script>
角度服务
由于我们安装了所有内容,因此我们需要创建服务来连接 Facebook。这些事情可以在控制器内用更少的代码来完成,但我们尝试遵循最佳实践,所以我们将使用 Angular 服务。以下代码显示了整个服务。我们稍后会解释。
服务.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和电子邮件。
我们正在创建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函数后添加更多Behave。您可能会向数据库发送一些数据,在登录后更改路由等。这可以通过使用 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 屏幕。登录成功后,用户将被重定向至应用程序。
