expo-facebook
provides Facebook integration, such as logging in through Facebook, for React Native apps. Expo exposes a minimal native API since you can access Facebook's Graph API directly through HTTP (using fetch, for example).Android Device | Android Emulator | iOS Device | iOS Simulator | Web |
---|---|---|---|---|
→
expo install expo-facebook
If you're installing this in a bare React Native app, you should also follow these additional installation instructions.
💡When following these steps you will find on the Facebook Developer site that there are many fields and steps that you don't actually care about. Just look for the information that we ask you for and you will be OK!
appId
option in your Facebook.logInWithReadPermissionsAsync
call.user_photos
or user_friends
), or integrate Facebook login with other services like Firebase auth. If you need that functionality on iOS, you can build a standalone app. An easy way to test this is to run a simulator build and install the app in your simulator, or use expo-dev-client.You may have to switch the app from 'development mode' to 'public mode' on the Facebook developer page before other users can log in. This requires adding a privacy policy URL, which can be as simple as a GitHub Gist.
eas credentials
, select the profile that you would like to generate the SHA-1 Fingerprint for, and press return.facebookScheme
with your Facebook login redirect URL scheme found on the Facebook Developer website under "4. Configure Your info.plist." It should look like "fb123456"
. If you do not do this, Facebook will not be able to redirect to your app after logging in.facebookAppId
and facebookDisplayName
, using your Facebook App ID and Facebook Display Name, respectively.facebookAutoLogAppEventsEnabled
, defaults to Facebook's default policy (Only applies to standalone apps)facebookAdvertiserIDCollectionEnabled
, defaults to Facebook's default policy (Only applies to standalone apps)expo-facebook
using its built-in config plugin if you use config plugins in your project (EAS Build or expo run:[android|ios]
). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect.expo build:[android|ios]
)expo-facebook
repository.{ "expo": { "plugins": [ [ "expo-facebook", { "userTrackingPermission": false } ] ] } }
Name | Default | Description |
---|---|---|
userTrackingPermission | "This identifier will be used to deliver personalized ads to you." | iOS only A string to set the NSUserTrackingUsageDescription permission message, or set to the boolean value false to omit the field entirely. |
async function logIn() { try { await Facebook.initializeAsync({ appId: '<APP_ID>', }); const { type, token, expirationDate, permissions, declinedPermissions } = await Facebook.logInWithReadPermissionsAsync({ permissions: ['public_profile'], }); if (type === 'success') { // Get the user's name using Facebook's Graph API const response = await fetch(`https://graph.facebook.com/me?access_token=${token}`); Alert.alert('Logged in!', `Hi ${(await response.json()).name}!`); } else { // type === 'cancel' } } catch ({ message }) { alert(`Facebook Login Error: ${message}`); } }
import * as Facebook from 'expo-facebook';
PermissionHookOptions<object>
)Check or request permissions to use data tracking.
This uses both requestPermissionsAsync
and getPermissionsAsync
to interact with the permissions.
const [status, requestPermission] = Facebook.usePermissions();
[null | PermissionResponse, RequestPermissionMethod<PermissionResponse>, GetPermissionMethod<PermissionResponse>]
Get the advertiser ID from Facebook.
Get an anonymous ID from Facebook.
Android only. Gets the attribution ID from Facebook.
Returns the FacebookAuthenticationCredential
object if a user is authenticated, and null
if no valid authentication exists.
You can use this method to check if the user should sign in or not.
Checks application's permissions for using data for tracking the user or the device.
iOS: it requires the NSUserTrackingUsageDescription message added to the info.plist.
Gets the user ID.
string | FacebookInitializationOptions
)string
)Calling this method ensures that the SDK is initialized.
You have to call this method before calling any method that uses
the FBSDK (ex: logInWithReadPermissionsAsync
, logOutAsync
) to ensure that
Facebook support is initialized properly.
appId
argument.
appId
, the Facebook SDK will try to use appId
from native app resources (which in standalone apps you define in app.json
, in app store development clients are unavailable, and in bare apps you configure yourself according to Facebook's setup documentation for iOS and Android). If the Facebook SDK fails to find an appId
value, the returned promise will be rejected.appName
.appId
, it will override any other source.string
)Params
)Logs an event with eventName and optional parameters. Supports the optional parameter valueToSum
,
which when reported, all of the valueToSum properties are summed together. For example, if 10 people purchased
one item and each item cost $10 (and passed in valueToSum) then they would be added together to report $100.
Parameters must be either strings or numbers, otherwise no event will be logged.
To view and test app events, please visit Facebook's Event Manager- https://www.facebook.com/events_manager2/list/app/
FacebookOptions
) - A map of options:
Prompts the user to log into Facebook and grants your app permission to access their Facebook data. On iOS and Android, if the Facebook app isn't installed then a web view will be used to authenticate.
If the user or Facebook cancelled the login, returns { type: 'cancel' }. Otherwise, returns { type: 'success' } & FacebookAuthenticationCredential.
number
)string
)Params
)Logs a purchase event with the amount, currency code, and optional parameters. Parameters must be either strings or numbers, otherwise no event will be logged. See http://en.wikipedia.org/wiki/ISO_4217 for currencyCodes.
string
)Logs an app event that tracks that the application was opened via Push Notification. Accepts a string describing the campaign of the Push Notification.
Asks for permissions to use data for tracking the user or the device.
iOS: it requires the NSUserTrackingUsageDescription message added to the info.plist.
boolean
) - Whether advertiser-id
should be collectedWhether the Facebook SDK should collect advertiser ID properties, like the Apple IDFA and Android Advertising ID, automatically. Advertiser IDs let you identify and target specific customers. To learn more visit Facebook documentation describing that topic.
In some cases, you may want to disable or delay the collection of advertiser-id
,
such as to obtain user consent or fulfill legal obligations.
This method corresponds to this and this native SDK methods.
boolean
) - Whether advertising tracking of the Facebook SDK should be enabledSets whether Facebook SDK should enable advertising tracking, (more info here).
Limitations:
This method corresponds to this
Promise<boolean>
Whether the value is set successfully. It will always return false in Android, iOS 13 and below.
Deprecated. Explicitly callinitializeAsync
instead.
boolean
)boolean
) - Whether automatic events logging of the Facebook SDK should be enabledSets whether Facebook SDK should log app events. App events involve eg. app installs, app launches (more info here and here).
In some cases, you may want to disable or delay the collection of automatically logged events, such as to obtain user consent or fulfill legal obligations.
This method corresponds to this and this native SDK methods.
UserData
)Sets additional data about the user to increase the chances of matching a Facebook user.
null | string
)Sets a custom user ID to associate with all app events. The userID is persisted until it is cleared by passing nil.
Name | Type | Description |
---|---|---|
appId | string | Application ID used to initialize the Facebook SDK app. |
dataAccessExpirationDate | Date | Time at which the current user data access expires. |
declinedPermissions (optional) | string[] | List of requested permissions that the user has declined. |
expirationDate | Date | Time at which the token expires. |
expiredPermissions (optional) | string[] | List of permissions that were expired with this access token. |
graphDomain (optional) | string | A website domain within the Graph API.https://developers.facebook.com/docs/graph-api/reference/v5.0/domain |
permissions (optional) | string[] | List of granted permissions. |
refreshDate (optional) | Date | The last time the token was refreshed (or when it was first obtained) |
signedRequest (optional) | string | A valid raw signed request as a string. |
token | string | Access token for the authenticated session. This token provides access to the Facebook Graph API. |
tokenSource (optional) | string | (Android only) Indicates how this token was obtained. |
userId | string | App-scoped Facebook ID of the user. |
Acceptable values are: FacebookSDKScriptURLOptions
, FacebookSDKInitializationOptions
, FacebookNativeInitializationOptions
.
Name | Type | Description |
---|---|---|
type | 'cancel' | - |
Name | Type | Description |
---|---|---|
appName (optional) | string | An optional Facebook App Name argument for iOS and Android. |
Name | Type | Description |
---|---|---|
permissions (optional) | string[] | - |
Name | Type | Description |
---|---|---|
appId (optional) | string | Application ID used to initialize the FBSDK app.On Android and iOS if you don't provide this, Facebook SDK will try to use appId from Android and iOS.
app resources (which in standalone apps you would define in app.json , in the Expo client are unavailable, and in bare you configure yourself according to Facebook setup documentation for iOS and Android).
If it fails to find one, the promise will be rejected. |
autoLogAppEvents (optional) | boolean | Sets whether Facebook SDK should log app events. App events involve app eg. installs, app launches (more info here and here). In some cases, you may want to disable or delay the collection of automatically logged events, such as to obtain user consent or fulfill legal obligations.This method corresponds to: |
version (optional) | string | Selects the version of FBSDK to use.https://developers.facebook.com/docs/javascript/reference/FB.init/v5.0 |
Name | Type | Description |
---|---|---|
domain (optional) | string | Android: Sets the base Facebook domain to use when making network requests. Defaults to: 'connect.facebook.net' |
Acceptable values are: 'never'
, number
.
Acceptable values are: PermissionHookBehavior
, Options
.
Info about a user to increase chances of matching a Facebook user. See https://developers.facebook.com/docs/app-events/advanced-matching for more info about the expected format of each field.
Name | Type | Description |
---|---|---|
city (optional) | string | - |
country (optional) | string | - |
dateOfBirth (optional) | string | - |
email (optional) | string | - |
firstName (optional) | string | - |
gender (optional) | 'm' | 'f' | - |
lastName (optional) | string | - |
phone (optional) | string | - |
state (optional) | string | - |
zip (optional) | string | - |
Name | Type | Description |
---|---|---|
canAskAgain | boolean | - |
expires | PermissionExpiration | - |
granted | boolean | - |
status | PermissionStatus | - |
DENIED
PermissionStatus.DENIED = "denied"
GRANTED
PermissionStatus.GRANTED = "granted"
UNDETERMINED
PermissionStatus.UNDETERMINED = "undetermined"
initializeAsync
has successfully resolved before attempting to use the Facebook SDK.appId
option wasn't provided and the appId
couldn't be resolved automatically from the native configuration files.fetch
API to get info about the user from the Facebook Graph API. Here are some helper methods you can use to make data access easier.// Get default info about the currently authenticated user. async function getUserAsync() { const { name } = await requestAsync('me'); console.log(`Hello ${name} 👋`); } // Request data from the Facebook Graph API. // Learn more https://developers.facebook.com/docs/graph-api/using-graph-api/ async function requestAsync(path: string, token?: string): Promise<any> { let resolvedToken = token; if (!token) { const auth = await Facebook.getAuthenticationCredentialAsync(); if (!auth) { throw new Error( 'User is not authenticated. Ensure `logInWithReadPermissionsAsync` has successfully resolved before attempting to use the FBSDK Graph API.' ); } resolvedToken = auth.token; } const response = await fetch( `https://graph.facebook.com/${path}?access_token=${encodeURIComponent(resolvedToken)}` ); const body = await response.json(); return body; }