package com.jaychang.slm; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.facebook.AccessToken; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.GraphRequest; import com.facebook.GraphResponse; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult; import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; import java.util.List; public class FbLoginHiddenActivity extends AppCompatActivity implements FacebookCallback<LoginResult>, GraphRequest.GraphJSONObjectCallback { private static final String PHOTO_URL = "https://graph.facebook.com/%1$s/picture?type=large"; private static final List<String> PERMISSIONS = Arrays.asList("email", "public_profile"); private CallbackManager callbackManager; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); callbackManager = CallbackManager.Factory.create(); LoginManager.getInstance().registerCallback(callbackManager, this); LoginManager.getInstance().logOut(); if (SocialLoginManager.getInstance(this).isWithProfile()) { LoginManager.getInstance().logInWithReadPermissions(this, PERMISSIONS); } else { LoginManager.getInstance().logInWithReadPermissions(this, null); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } @Override public void onSuccess(LoginResult loginResult) { if (!SocialLoginManager.getInstance(this).isWithProfile()) { handleLoginSuccess(loginResult); finish(); return; } GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), this); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,link"); request.setParameters(parameters); request.executeAsync(); } private void handleLoginSuccess(LoginResult result) { SocialUser user = new SocialUser(); user.userId = result.getAccessToken().getUserId(); user.accessToken = result.getAccessToken().getToken(); user.photoUrl = String.format(PHOTO_URL, user.userId); SocialLoginManager.getInstance(this).onLoginSuccess(user); } @Override public void onCancel() { SocialLoginManager.getInstance(this).onLoginCancel(); finish(); } @Override public void onError(FacebookException error) { SocialLoginManager.getInstance(this).onLoginError(error.getCause()); finish(); } @Override public void onCompleted(JSONObject object, GraphResponse response) { try { SocialUser user = new SocialUser(); user.userId = object.getString("id"); user.accessToken = AccessToken.getCurrentAccessToken().getToken(); user.photoUrl = String.format(PHOTO_URL, user.userId); SocialUser.Profile profile = new SocialUser.Profile(); profile.email = object.has("email")? object.getString("email") : ""; profile.name = object.has("name")? object.getString("name"): ""; profile.pageLink = object.has("link")? object.getString("link"): ""; user.profile = profile; SocialLoginManager.getInstance(this).onLoginSuccess(user); } catch (JSONException e) { SocialLoginManager.getInstance(this).onLoginError(e.getCause()); } LoginManager.getInstance().logOut(); finish(); } }