React Native FBSDK
React Native FBSDK is a wrapper around the iOS Facebook SDK and Android Facebook SDK, allowing for Facebook integration inReact Native apps. Access to native components, from login to sharing, is provided entirely through documented JavaScript modules so you don't have to call a single native function directly.
Functionality is provided through one single npm package so you can use it for both platforms without downloading any extra packages. Follow this guide to use react-native-fbsdk in your React Native app. You can also visithttps://developers.facebook.com/docs/react-native for tutorials and reference documentation.
Installation
React Native Compatibility
To use this library you need to ensure you match up with the correct version of React Native you are using.
react-native-fbsdk version | Required React Native Version |
---|---|
>= 1.0.0 | >= 0.60 |
<= 0.10 | <= 0.59.x |
1. Install the library
using either Yarn:
yarn add react-native-fbsdk
or npm:
npm install --save react-native-fbsdk
2. Link
- React Native 0.60+
CLI autolink feature links the module while building the app.
Note ForiOS
usingcocoapods
, run:
$ cd ios/ && pod install
- React Native <= 0.59
$ react-native link react-native-fbsdk
If you can't or don't want to use the CLI tool, you can also manually link the library using the instructions below (click on the arrow to show them):
Manually link the library on iOS
Either follow theinstructions in the React Native documentation to manually link the framework or link usingCocoapods by adding this to yourPodfile
:
pod 'react-native-fbsdk', :path => '../node_modules/react-native-fbsdk'
Manually link the library on Android
Make the following changes:
android/settings.gradle
include ':react-native-fbsdk'project(':react-native-fbsdk').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-fbsdk/android')
android/app/build.gradle
dependencies {...implementation project(':react-native-fbsdk')}
android/app/src/main/.../MainApplication.java
On top, where imports are:
import com.facebook.reactnative.androidsdk.FBSDKPackage;
Add theFBSDKPackage
class to your list of exported packages.
@Overrideprotected List<ReactPackage> getPackages() {return Arrays.asList(new MainReactPackage(),new FBSDKPackage());}
3. Configure projects
3.1 Android
Before you can run the project, follow theGetting Started Guide for Facebook Android SDK to set up a Facebook app. You can skip the build.gradle changes since that's taken care of by the rnpm link step above, butmake sure you follow the rest of the steps such as updatingstrings.xml
andAndroidManifest.xml
.
3.2 iOS
Followsteps 3 and 4 in theGetting Started Guide for Facebook SDK for iOS.
If you're not using cocoapods already you can also follow step 1.1 to set it up.
If you're using React Native's RCTLinkingManager
TheAppDelegate.m
file can only have one method foropenUrl
. If you're also usingRCTLinkingManager
to handle deep links, you should handle both results in youropenUrl
method.
- (BOOL)application:(UIApplication *)appopenURL:(NSURL *)urloptions:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{if ([[FBSDKApplicationDelegate sharedInstance] application:app openURL:url options:options]) {return YES;}if ([RCTLinkingManager application:app openURL:url options:options]) {return YES;}return NO;}
Troubleshooting
- I cannot run the Android project.
- Make sure you added the code snippet in step 3.1.
- Make sure you set up a Facebook app and updated the
AndroidManifest.xml
andres/values/strings.xml
with Facebook app settings.
- Duplicate symbol errors
- Make sure that
FBSDK[Core, Login, Share]Kit.framework
areNOT inLink Binary with Libraries
for yourroot project when using cocoapods.
- I get this build error:
no type or protocol named UIApplicationOpenURLOptionsKey
:
- Your Xcode version is too old. Upgrade to Xcode 10.0+.
- Afterfacebook-ios-sdk v7 you need to create a swift file into the main project folder:
Usage
Login
Login Button + Access Token
import React, { Component } from 'react';import { View } from 'react-native';import { LoginButton, AccessToken } from 'react-native-fbsdk';export default class Login extends Component {render() {return (<View><LoginButtononLoginFinished={(error, result) => {if (error) {console.log("login has error: " + result.error);} else if (result.isCancelled) {console.log("login is cancelled.");} else {AccessToken.getCurrentAccessToken().then((data) => {console.log(data.accessToken.toString())})}}}onLogoutFinished={() => console.log("logout.")}/></View>);}};
Requesting additional permissions with Login Manager
You can also use the Login Manager with custom UI to perform Login.
// ...import { LoginManager } from "react-native-fbsdk";// ...// Attempt a login using the Facebook login dialog asking for default permissions.LoginManager.logInWithPermissions(["public_profile"]).then(function(result) {if (result.isCancelled) {console.log("Login cancelled");} else {console.log("Login success with permissions: " +result.grantedPermissions.toString());}},function(error) {console.log("Login fail with error: " + error);});
Sharing
Share dialogs
All of the dialogs included are used in a similar way, with differing content types. All content types are defined withFlow Type Annotation in js/models directory.
// ...import { ShareDialog } from 'react-native-fbsdk';// ...// Build up a shareable link.const shareLinkContent = {contentType: 'link',contentUrl: "https://facebook.com",contentDescription: 'Wow, check out this great site!',};// ...// Share the link using the share dialog.shareLinkWithShareDialog() {var tmp = this;ShareDialog.canShow(this.state.shareLinkContent).then(function(canShow) {if (canShow) {return ShareDialog.show(tmp.state.shareLinkContent);}}).then(function(result) {if (result.isCancelled) {console.log('Share cancelled');} else {console.log('Share success with postId: '+ result.postId);}},function(error) {console.log('Share fail with error: ' + error);});}
Share Photos
SeeSharePhotoContent andSharePhoto to refer other options.
const FBSDK = require('react-native-fbsdk');const {ShareApi,} = FBSDK;const photoUri = 'file://' + '/path/of/photo.png'const sharePhotoContent = {contentType = 'photo',photos: [{ imageUrl: photoUri }],}// ...ShareDialog.show(tmp.state.sharePhotoContent);
Share Videos
SeeShareVideoContent andShareVideo to refer other options.
const FBSDK = require('react-native-fbsdk');const {ShareApi,} = FBSDK;const videoUri = 'file://' + '/path/of/video.mp4'const shareVideoContent = {contentType = 'video',video: { localUrl: videoUri },}// ...ShareDialog.show(tmp.state.shareVideoContent);
Share API
Your app must have thepublish_actions
permission approved to share through the share API. You should prefer to use the Share Dialogs for an easier and more consistent experience.
// ...import { ShareApi } from 'react-native-fbsdk';// ...// Build up a shareable link.const shareLinkContent = {contentType: 'link',contentUrl: "https://facebook.com",contentDescription: 'Wow, check out this great site!',};// ...// Share using the share API.ShareApi.canShare(this.state.shareLinkContent).then(var tmp = this;function(canShare) {if (canShare) {return ShareApi.share(tmp.state.shareLinkContent, '/me', 'Some message.');}}).then(function(result) {console.log('Share with ShareApi success.');},function(error) {console.log('Share with ShareApi failed with error: ' + error);});
Analytics
App events
// ...import { AppEventsLogger } from "react-native-fbsdk";// ...// Log a $15 purchase.AppEventsLogger.logPurchase(15, "USD", { param: "value" });
Graph API
Graph Requests
// ...import { GraphRequest, GraphRequestManager } from 'react-native-fbsdk';// ...//Create response callback._responseInfoCallback(error: ?Object, result: ?Object) {if (error) {console.log('Error fetching data: ' + error.toString());} else {console.log('Success fetching data: ' + result.toString());}}// Create a graph request asking for user information with a callback to handle the response.const infoRequest = new GraphRequest('/me',null,this._responseInfoCallback,);// Start the graph request.new GraphRequestManager().addRequest(infoRequest).start();
Example app
iOS
- Run
pod install
inexample/ios
- Run
yarn example:ios
Android
- Run
yarn example:android
Join the React Native community
See theCONTRIBUTING file for how to help out.
License
See the LICENSE file.
Platform Policy
Developers looking to integrate with the Facebook Platform should familiarize themselves with theFacebook Platform Policy.
Package Sidebar
Install
npm i react-native-fbsdk
Repository
Weekly Downloads
19,065
Version
3.0.0
License
Facebook Platform License
Unpacked Size
635 kB
Total Files
219