Initialize Facebook SDK and register callback :
public void initFacebookSdk() { FacebookSdk.sdkInitialize(activity.getApplicationContext()); mCallbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d("Success", "Login"); Log.d(TAG, "Facebook getApplicationId: " + loginResult.getAccessToken().getApplicationId()); Log.d(TAG, "Facebook getToken: " + loginResult.getAccessToken().getToken()); Log.d(TAG, "Facebook getUserId: " + loginResult.getAccessToken().getUserId()); Log.d(TAG, "Facebook getExpires: " + loginResult.getAccessToken().getExpires()); Log.d(TAG, "Facebook getLastRefresh: " + loginResult.getAccessToken().getLastRefresh()); } @Override public void onCancel() { Toast.makeText(activity, "Login Cancel", Toast.LENGTH_LONG).show(); } @Override public void onError(FacebookException exception) { Toast.makeText(activity, exception.getMessage(), Toast.LENGTH_LONG).show(); Log.d(TAG, exception.getMessage()); } }); }
After that, make an activation call for login
public void callLoginActivity() { LoginManager loginManager = LoginManager.getInstance(); loginManager.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK); loginManager.logInWithReadPermissions( activity, Arrays.asList("public_profile", "user_friends", "read_custom_friendlists")); }
as a result, you will return the data to the onSuccess(LoginResult loginResult) method, after which you can already make other requests for user data with the received token .
After you get the token you can request it like this:
/** * Get current user access token by Facebook * * @return - instance of current {@link com.facebook.AccessToken} */ public AccessToken getAccessToken() { if (AccessToken.getCurrentAccessToken() == null) { System.out.println("not logged in yet"); } else { System.out.println("Logged in"); } return AccessToken.getCurrentAccessToken(); }
Further, if you want to get some user profile data from Facebook, you make a request to Graph Api , for example, a request that will return data such as your name, id, avatar:
/** * GraphApi request for get device user info * from Facebook as: id, name, avatar */ public void getMeInfo() { AccessToken token = AccessToken.getCurrentAccessToken(); GraphRequest request = GraphRequest.newGraphPathRequest( token, PATH_ME, new GraphRequest.Callback() { @Override public void onCompleted(GraphResponse response) { JSONObject object; //raw response json object JSONObject pictureData; //json object which contains picture data try { //check is response is not empty if (response.getError() == null){ //parse json object = new JSONObject(response.getRawResponse().toString()); pictureData = object.getJSONObject("picture").getJSONObject("data"); long id = Long.parseLong(object.optString("id"); String name = object.getString("name"); String url = pictureData.optString("url"); } } catch (JSONException e) { e.printStackTrace(); } } }); //request params Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,picture.type(large)"); request.setParameters(parameters); request.executeAsync(); }
All other requests to GraphApi are done in a similar way. Here is a link to the documentation and a link to the Graph Api Explorer , in it you can test requests and in it you can generate the code of this request for your application, i.e. you simply copy it into your application and be able to use it, it is very convenient.