Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android Kotlin - Facebook Login - get user data

I'm new in android developement and already searched for hours without finding the way how to get the damn user data after facebook login!

This is the code:

private var callbackManager: CallbackManager? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_fb_connect)




        // Login
        callbackManager = CallbackManager.Factory.create()
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
        LoginManager.getInstance().registerCallback(callbackManager,
                object : FacebookCallback<LoginResult> {
                    override fun onSuccess(loginResult: LoginResult) {
                        Log.d("letsSee", "Facebook token: " + loginResult.accessToken.token)

                    }

                    override fun onCancel() {
                        Log.d("letsSee", "Facebook onCancel.")

                    }

                    override fun onError(error: FacebookException) {
                        Log.d("letsSee", "Facebook onError.")

                    }
                })

}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    callbackManager?.onActivityResult(requestCode, resultCode, data)

    Log.d("letsSee", "malsehnnnnnn: " + data)
}

The Log.d("letsSee", "malsehnnnnnn: " + data) at the bottom gives: malsehnnnnnn: Intent { (has extras) }

Where is the damn data???? The facebook docs are weird and very poor!


1 Answers

Send GraphRequest usign accessToken and you will get json of your requested fields.

Updated into kotlin

LoginManager.getInstance().registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
        override fun onSuccess(loginResult: LoginResult) {
            Logger.d("FBLOGIN", loginResult.accessToken.token.toString())
            Logger.d("FBLOGIN", loginResult.recentlyDeniedPermissions.toString())
            Logger.d("FBLOGIN", loginResult.recentlyGrantedPermissions.toString())


            val request = GraphRequest.newMeRequest(loginResult.accessToken) { `object`, response ->
                try {
                    //here is the data that you want
                    Logger.d("FBLOGIN_JSON_RES", `object`.toString())

                    if (`object`.has("id")) {
                        handleSignInResultFacebook(`object`)
                    } else {
                        Logger.e("FBLOGIN_FAILD", `object`.toString())
                    }

                } catch (e: Exception) {
                    e.printStackTrace()
                    dismissDialogLogin()
                }
            }

            val parameters = Bundle()
            parameters.putString("fields", "name,email,id,picture.type(large)")
            request.parameters = parameters
            request.executeAsync()

        }

        override fun onCancel() {
            Logger.e("FBLOGIN_FAILD", "Cancel")
        }

        override fun onError(error: FacebookException) {
            Logger.e("FBLOGIN_FAILD", "ERROR", error)
        }
    })

Old answer

Here is the java code working for me

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Logger.d("FBLOGIN", String.valueOf(loginResult.getAccessToken().getToken()));
            Logger.d("FBLOGIN", String.valueOf(loginResult.getRecentlyDeniedPermissions().toString()));
            Logger.d("FBLOGIN", String.valueOf(loginResult.getRecentlyGrantedPermissions().toString()));


            final GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    try {
                        //here is the data that you want
                        Logger.d("FBLOGIN_JSON_RES", String.valueOf(object));

                        if (object.has("id")) {
                            handleSignInResultFacebook(object);
                        } else {
                            Logger.e("FBLOGIN_FAILD", String.valueOf(object));
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                        dismissDialogLogin();
                    }
                }
            });

            final Bundle parameters = new Bundle();
            parameters.putString("fields", "name,email,id,picture.type(large)");
            request.setParameters(parameters);
            request.executeAsync();

        }

        @Override
        public void onCancel() {
            Logger.e("FBLOGIN_FAILD", "Cancel");
        }

        @Override
        public void onError(FacebookException error) {
            Logger.e("FBLOGIN_FAILD", "ERROR", error);
        }
    });

convert into kotlin

like image 75
Bhavesh Rangani Avatar answered Feb 13 '26 19:02

Bhavesh Rangani