Updated 1 December 2018
The Facebook SDK for Android enables people to sign into your app with Facebook Login. When people log into your app with Facebook they can grant permissions to your app so you can retrieve information or perform actions on Facebook on their behalf.
Before you begin implementing Facebook Login, make sure you have completed the following setup.
Download the Facebook app by clicking the button below.
If you don’t have a Facebook developer account, create one by clicking the button below. Your Facebook developer account gives you access to developer tools and allows you to create Facebook apps.
Download the latest Facebook SDK for Android.
Use Quick Start by clicking the button below, or follow the steps in the Getting Started.
Enable single sign on for your app by choosing your app from My Apps on the Facebook Developer site, choosing Settings for your app, and setting Single Sign On to Yes.
FacebookActivity
in your AndroidManifest.xml
.
1 2 3 4 5 |
<activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> |
The simplest way to add Facebook Login to your app is to add LoginButton
from the SDK. This is a custom view implementation of a Button
. You can use this button in your app to implement Facebook Login.
In conjunction with the LoginButton
, you use the following classes, available in the SDK:
onActivityResult
call.The LoginButton
is a UI element that wraps functionality available in the LoginManager
. So when someone clicks on the button, the login is initiated with the permissions set in the LoginManager
. The button follows the login state, and displays the correct text based on someone’s authentication state.
To add the Facebook Login button, first add it to your layout XML file with the full class name,com.facebook.widget.LoginButton
:
1 2 3 4 5 6 7 |
<com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:layout_marginBottom="30dp" /> |
Then set up the button in your UI by adding it to a fragment and update your activity to use your fragment.
You can customize the properties of Login button
and register a callback in your onCreateView()
method.
Properties you can customize includes LoginBehavior
, DefaultAudience
, ToolTipPopup.Style
and permissions on the LoginButton
. For example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
@Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.splash, container, false); loginButton = (LoginButton) view.findViewById(R.id.login_button); loginButton.setReadPermissions("email"); // If using in a fragment loginButton.setFragment(this); // Other app specific specialization // Callback registration loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { // App code } }); } |
If you use the LoginButton
in a fragment, you need to set the fragment on the button as shown by callingsetFragment
.
You then need to call FacebookSdk.sdkInitialize
to initialize the SDK, and then callCallbackManager.Factory.create
to create a callback manager to handle login responses. Here’s an example of adding the callback in a fragment:
1 2 3 4 5 6 7 8 9 10 |
public class MainActivity extends FragmentActivity { CallbackManager callbackManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(getApplicationContext()); callbackManager = CallbackManager.Factory.create(); LoginButton loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button); loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { ... }); } |
Finally you should call callbackManager.onActivityResult
to pass the login results to theLoginManager
via callbackManager
.
To respond to a login result, you need to register a callback with either LoginManager
or LoginButton
. If you register the callback with LoginButton
, don’t need to register the callback on Login manager.
You add the callback to your activity or fragment’s onCreate()
method:
1 2 3 4 5 6 7 |
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); FacebookSdk.sdkInitialize(this.getApplicationContext()); callbackManager = CallbackManager.Factory.create(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
loginButton.setReadPermissions(Arrays.asList("public_profile", "email")); loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { GraphRequest graphRequest = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { try { // All data like Name,Email can be fetched from "object" } catch (JSONException e) { e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,first_name,last_name,picture.type(large)"); graphRequest.setParameters(parameters); graphRequest.executeAsync(); } |
If login succeeds, the LoginResult
parameter has the new AccessToken
, and the most recently granted or declined permissions.
You don’t need a registerCallback
for login to succeed, you can choose to follow current access token changes with the AccessTokenTracker
class described below.
Then in onActivityResult()
forward the login results to the callbackManager
created inonCreate()
:
1 2 3 4 5 |
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } |
Every activity and fragment that you integrate with the FacebookSDK Login or Share should forwardonActivityResult
to the callbackManager
Enable Chrome Custom Tabs by adding an intent filter to your manifest and afb_login_protocol_scheme
to your strings.xml
file. When you enable Chrome Custom Tabs, the SDK presents the login dialog in a Chrome Custom Tab instead of a WebView when the Facebook app is not installed. As a result, people do not have to enter their credentials again if they are already logged into Facebook in their Chrome browser.
Add the following intent filter to your AndroidManifest.xml
file:
1 2 3 4 5 6 7 8 9 10 |
<activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter> </activity> |
Add the following in your strings.xml
file:
1 2 |
// if your App ID is 1234567, you should use fb1234567 <string name="fb_login_protocol_scheme">fbAPP_ID</string> |
If you have more details or questions, you can reply to the received confirmation email.
Back to Home
Be the first to comment.