Here is the code of FacebookHelper class, which you need to integrate facebook in your app.
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.FacebookSdk; import com.facebook.GraphRequest; import com.facebook.GraphResponse; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult; import com.spellstudio.ringin.socialauthentications.Response; import com.spellstudio.ringin.socialauthentications.User; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; public class FacebookHelper {
private Response.Facebook mListener; private String mFieldString; private CallbackManager mCallBackManager; public FacebookHelper(Response.Facebook responseListener, String fieldString, Activity context) {
FacebookSdk.sdkInitialize(context.getApplicationContext()); //noinspection ConstantConditions if (responseListener == null) throw new IllegalArgumentException("FacebookResponse listener cannot be null."); //noinspection ConstantConditions if (fieldString == null) throw new IllegalArgumentException("field string cannot be null."); mListener = responseListener; mFieldString = fieldString; mCallBackManager = CallbackManager.Factory.create(); //get access token FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() {
@Override public void onSuccess(LoginResult loginResult) { mListener.onFbSignInSuccess(); //get the user profile getUserProfile(loginResult); } @Override public void onCancel() { mListener.onFbSignInFail(); } @Override public void onError(FacebookException e) { mListener.onFbSignInFail(); } }; LoginManager.getInstance().registerCallback(mCallBackManager, mCallBack); } /** * Get user facebook profile. * * @param loginResult login result with user credentials. */ private void getUserProfile(LoginResult loginResult) { // App code GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { Log.e("response: ", response + ""); try { mListener.onFbProfileReceived(parseResponse(object)); } catch (Exception e) { e.printStackTrace(); mListener.onFbSignInFail(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", mFieldString); request.setParameters(parameters); request.executeAsync(); } /** * Get the {@link CallbackManager} for managing callbacks. * * @return {@link CallbackManager} */ public CallbackManager getCallbackManager() { return mCallBackManager; } /** * Parse the response received into {@link FacebookUser} object. * * @param object response received. * @return {@link FacebookUser} with required fields. * @throws JSONException */ private User.Facebook parseResponse(JSONObject object) throws JSONException { User mUser = new User(); User.Facebook user = new mUser.Facebook(); user.response = object; if (object.has("id")) user.facebookID = object.getString("id"); if (object.has("email")) user.email = object.getString("email"); if (object.has("name")) user.name = object.getString("name"); if (object.has("gender")) user.gender = object.getString("gender"); if (object.has("about")) user.about = object.getString("about"); if (object.has("bio")) user.bio = object.getString("bio"); if (object.has("user_birthday")) user.dob = object.getString("user_birthday"); if (object.has("cover")) user.coverPicUrl = object.getJSONObject("cover").getString("source"); if (object.has("picture")) user.profilePic = object.getJSONObject("picture").getJSONObject("data").getString("url"); return user; } /** * Perform facebook sign in.<p> * NOTE: If you are signing from the fragment than you should call {@link #performSignIn(Fragment)}.<p> * This method should generally call when user clicks on "Sign in with Facebook" button. * * @param activity instance of the caller activity. */ public void performSignIn(Activity activity) { LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile", "user_friends", "email")); } /** * Perform facebook login. This method should be called when you are signing in from * fragment.<p> * This method should generally call when user clicks on "Sign in with Facebook" button. * * @param fragment caller fragment. */ public void performSignIn(Fragment fragment) { LoginManager.getInstance().logInWithReadPermissions(fragment, Arrays.asList("public_profile", "user_friends", "email")); } /** * This method handles onActivityResult callbacks from fragment or activity. * * @param requestCode request code received. * @param resultCode result code received. * @param data Data intent. */ public void onActivityResult(int requestCode, int resultCode, Intent data) { mCallBackManager.onActivityResult(requestCode, resultCode, data); } public void performSignOut() { LoginManager.getInstance().logOut(); mListener.onFBSignOut(); } }
No comments:
Post a Comment