Login with Facebook in Android Using Kotlin - RRutors
Last updated Dec 19, 2021In this android example tutorial we will see integrate Facebook sdk and login with facebook in android using Kotlin Programming Language.
Implementation:
Step 1: Create a new project in Android Studio, go to File > New Project and fill all required details to create a new project.
To work with Facebook sdk we need to create an application in Facebook developer account and get the api keys.
Step 2: Go to facebook developers console and login/signup with credentials.
https://developers.facebook.com/ |
Click on Login/SignUp which is available on the right side of the screen, fill your credentails and enter in your dashboard.
Step 3: Click on Create App
![]() |
Select an app type > Business and then Next.
Enter the Display name and click Create App.
May be show re-enter password window, enter the password and continue.
![]() |
On your window you will see the option of Facebook Login and click on SetUP.
Select Android.
After this you will see the window for
> Download the Facebook SDK for Android > Click on Next.
> Import the Facebook SDK > Click on Next.
> Tell Us about Your Android Project > Enter your package name : "com.example.yourappname" and Default Activity Class Name : "com.example.yourappname.MainActivity"
Enter Save then Continue.
Now we need to add hashkeys to verify our application, to create HashKey we need to use below code
Step 2: We will get HashKey from Android Project by adding following code in MainActivity.
class MainActivity : AppCompatActivity() { } |
After run the app you will get a Key in logcat.
![]() |
> Add Your Development and Release Key Hashes > Enter your hashKey in Key Hashes Box and click Save and then CONTINUE.
> Enable Single Sign On for Your App > Enable Single sign on Status from No To Yes > Enter Save and Next.
We are done with creating app at facebook developer account, now we need to configure our android application.
Step 4: Copy the the key strings which you get from facebook dashboard and paste in strings.xml file
<string name="facebook_app_id">Your facebook app id</string> <string name="fb_login_protocol_scheme">Your protocol</string>
|
Step 5: Add the facebook sdk dependency to build.gradle(app) inside dependencies element.
implementation 'com.facebook.android:facebook-android-sdk:12.0.0' |
Step 6: Add the Internet permission into AndroidManifest.xml file
<uses-permission android:name="android.permission.INTERNET"/> |
Step 7: Add the following code in AndroidManifest.xml file inside application element.
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <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> |
Now we will add facebook default login button into our xml file, this will gives the default facebook login button to handle login feature
Step 8: Open activity_main.xml file and ad the following code inside constraint layout.
<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" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> |
Now let's add facebook login functionality in our example activity
Step 9: After adding open MainActivity.xml file and add the code.
private const val TAG = "MainActivity" private lateinit var callbackManager: CallbackManager
//login callback override fun onSuccess(result: LoginResult) { val bundle = Bundle()
//For safety measure enclose the request with try and catch Log.d(TAG, "onSuccess: fbObject $fbObject") val firstName = fbObject?.getString("first_name") Log.d(TAG, "onSuccess: firstName $firstName") } //If no data has been retrieve throw some error } } //Execute this Graph request asynchronously } override fun onCancel() { override fun onError(error: FacebookException) {
} } private fun GraphRequest.parameters(bundle: Bundle) { } |
Step 10: Now run the app you will see the output as below:
OUTPUT:
![]() |
![]() |
Complete Source Code of Facebook Login with Example:
- activity_main.xml file
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <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" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> |
MainActivity.kt file
import android.content.ContentValues.TAG import android.content.Intent import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.facebook.* import com.facebook.login.LoginResult import com.facebook.login.widget.LoginButton import org.json.JSONException private const val TAG = "MainActivity" class MainActivity : AppCompatActivity() { private lateinit var callbackManager: CallbackManager private lateinit var loginButton: LoginButton override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //init loginButton = findViewById(R.id.login_button) callbackManager = CallbackManager.Factory.create() loginButton.setPermissions(listOf("email", "user_birthday")) //login callback loginButton.registerCallback(callbackManager, object : FacebookCallback { override fun onSuccess(result: LoginResult) { val userId = result.accessToken.userId Log.d(TAG, "onSuccess: userId $userId") val bundle = Bundle() bundle.putString("fields", "id, email, first_name, last_name, gender,age_range") //Graph API to access the data of user's facebook account val request = GraphRequest.newMeRequest( result.accessToken ) { fbObject, response -> Log.v("Login Success", response.toString()) //For safety measure enclose the request with try and catch try { Log.d(TAG, "onSuccess: fbObject $fbObject") val firstName = fbObject?.getString("first_name") val lastName = fbObject?.getString("last_name") // val gender = fbObject?.getString("gender") val email = fbObject?.getString("email") Log.d(TAG, "onSuccess: firstName $firstName") Log.d(TAG, "onSuccess: lastName $lastName") // Log.d(TAG, "onSuccess: gender $gender") Log.d(TAG, "onSuccess: email $email") } //If no data has been retrieve throw some error catch (e: JSONException) { } } //Set the bundle's data as Graph's object data request.parameters(bundle) //Execute this Graph request asynchronously request.executeAsync() } override fun onCancel() { Log.d(TAG, "onCancel: called") } override fun onError(error: FacebookException) { Log.d(TAG, "onError: called") } }) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { callbackManager.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data) } } private fun GraphRequest.parameters(bundle: Bundle) { } |
AndroidManifest.xml file
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Your Package Name"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.FacebookLogin"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <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> </application> </manifest> |
strings.xml file
<resources> <string name="app_name">FacebookLogin</string> <string name="facebook_app_id">Your facebook app id</string> <string name="fb_login_protocol_scheme">Your fb login protocol</string> </resources>
|
build.gradle(app) file
plugins { id 'com.android.application' id 'kotlin-android' } android { compileSdk 31 defaultConfig { applicationId "Your package name" minSdk 21 targetSdk 31 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } dependencies { implementation 'androidx.core:core-ktx:1.7.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation 'com.facebook.android:facebook-android-sdk:12.0.0' } |
Conclusion: All we have covered how to integrate facebook sdk in android and login with facebook in android app using Kotlin Language.
Article Contributed By :
|
|
|
|
3034 Views |