Ionic Facebook Ionic 相机 Ionic InAppBrowser 此插件用于连接到FacebookAPI。在开始整合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 标签顶部添加 根 元素。 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 和 版本 与您创建的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 = "//connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); </script> 角度服务 由于我们安装了所有内容,因此我们需要创建与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 和 电子邮件 。 我们正在创建 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> 当用户点击 LOG IN 按钮时,将出现Facebook屏幕。登录成功后,用户将被重定向到应用程序。 ![Ionic Cordova Facebook](./Ionic Cordova Facebook_files/ionic-cordova- facebook.jpg) Ionic 相机 Ionic InAppBrowser