项目作者: scalajs-io

项目描述 :
Scala.js Facebook SDK
高级语言: Scala
项目地址: git://github.com/scalajs-io/facebook-api.git
创建时间: 2017-02-10T05:10:27Z
项目社区:https://github.com/scalajs-io/facebook-api

开源协议:Apache License 2.0

下载


Facebook API for Scala.js

A Scala.js type-safe binding for the Facebook SDK.

Build Dependencies

Build/publish the SDK locally

  1. $ sbt clean publish-local

Running the tests

Before running the tests the first time, you must ensure the npm packages are installed:

  1. $ npm install

Then you can run the tests:

  1. $ sbt test

Examples

Inside of your HTML index page:

  1. <script>
  2. (function(d, s, id){
  3. var js, fjs = d.getElementsByTagName(s)[0];
  4. if (d.getElementById(id)) {return;}
  5. js = d.createElement(s); js.id = id;
  6. js.src = "//connect.facebook.net/en_US/sdk.js";
  7. fjs.parentNode.insertBefore(js, fjs);
  8. }(document, 'script', 'facebook-jssdk'));
  9. </script>

Within your Scala.js application, you can initialize the Facebook SDK:

  1. import io.scalajs.social.facebook._
  2. val config = FacebookAppConfig(appId = "[YOUR_APP_KEY_GOES_HERE]", status = true, xfbml = true, version = "v2.5")
  3. FB.init(config)

Assuming you’re using AngularJS, within your Scala.js application, you define the AngularJS Facebook service:

  1. module.serviceOf[FacebookService]("Facebook")

Finally, within your AngularJS controller or service you invoke the Facebook login:

  1. import io.scalajs.util.ScalaJsHelper._
  2. class SocialController($scope: SocialControllerScope, @injected("Facebook") facebook: FacebookService) extends Controller {
  3. private var facebookID: js.UndefOr[String] = js.undefined
  4. $scope.loginToFacebook = () => {
  5. facebook.login() onComplete {
  6. case Success(response) =>
  7. facebookID = response.authResponse.userID
  8. case Failure(e) =>
  9. toaster.error("Facebook Login Error", e.displayMessage)
  10. }
  11. }
  12. }
  13. @js.native
  14. trait SocialControllerScope extends Scope {
  15. var loginToFacebook: js.Function0[Unit] = js.native
  16. }

Afterwards, you may call any Facebook API that you have the permissions to execute:

  1. import io.scalajs.social.facebook._
  2. import io.scalajs.util.ScalaJsHelper._
  3. val outcome = for {
  4. fbProfile <- facebook.getUserProfile
  5. fbFriends <- facebook.getTaggableFriends
  6. } yield (fbProfile, friends)
  7. outcome onComplete {
  8. case Success((fbProfile, friends)) =>
  9. console.log(s"fbProfile = ${angular.toJson(fbProfile, pretty = true)}")
  10. console.log(s"fbFriends = ${angular.toJson(fbFriends, pretty = true)}")
  11. case Failure(e) =>
  12. toaster.error(s"Failed to retrieve Facebook profile and friends - ${e.displayMessage}")
  13. }

If you’re not using AngularJS, you can use the Facebook SDK directly:

  1. import io.scalajs.social.facebook._
  2. import scalajs.js
  3. FB.login((response: js.UndefOr[FacebookLoginStatusResponse]) =>
  4. response.toOption match {
  5. case Some(resp) if resp.error.isEmpty => console.log(s"auth = ${angular.toJson(auth)}")
  6. case Some(resp) => console.error(s"Error logging in to Facebook: ${resp.error}")
  7. case None => console.error("No response from Facebook servers")
  8. }
  9. )

Artifacts and Resolvers

To add the Facebook binding to your project, add the following to your build.sbt:

  1. libraryDependencies += "io.scalajs" %%% "facebook-api" % "0.5.0"

Optionally, you may add the Sonatype Repository resolver:

  1. resolvers += Resolver.sonatypeRepo("releases")