Facebook Login/google Login - Same Activity?
I am trying to give my users the option to sign in with either Google or Facebook. So far I found an example to implement a Google Sign in Flow, but I am confused if I can implemen
Solution 1:
set both fragments (facebook and google) in the layout that you use as login and in another to receive the session validated
<com.facebook.widget.LoginButton
android:id="@+id/authButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp" />
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"android:layout_below="@id/authButton"android:layout_width="wrap_content"android:layout_height="wrap_content" />
then use al functions required by each one
publicclassMainActivityextendsActivityimplementsConnectionCallbacks,OnConnectionFailedListener {
//googleprivatePlusClient plusClient;
privateSignInButton btnSignIn;
privateProgressDialog connectionProgressDialog;
privateConnectionResult connectionResult;
privatestatic final int REQUEST_CODE_RESOLVE_ERR = 9000;
//faceprivateLoginButton buttonLoginLogout;
privateUiLifecycleHelper uiHelper;
staticUsuario appusuario;
staticString urldelogin="algo";
privateSession.StatusCallback callback = newSession.StatusCallback() {
@Overridepublicvoidcall(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
if (session.isOpened()) {
Log.e("usuario", "si hay sesion");
// make request to the /me APIRequest.newMeRequest(session, newRequest.GraphUserCallback() {
// callback after Graph API response with user object@OverridepublicvoidonCompleted(GraphUser user, Response response) {
if (user != null) {
Log.e("usuario", "si hay usuario");
buildUserInfoDisplay(user);
//start another activity
}
}
}).executeAsync();
}
}
privatevoidonSessionStateChange(Session session, SessionState state,
Exception exception) {
// TODO Auto-generated method stub
}
};
@OverridepublicvoidonResume() {
super.onResume();
uiHelper.onResume();
}
@OverridepublicvoidonPause() {
super.onPause();
uiHelper.onPause();
}
@OverridepublicvoidonActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_RESOLVE_ERR &&
resultCode == RESULT_OK)
{
connectionResult = null;
plusClient.connect();
}
}
@OverridepublicvoidonDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@OverrideprotectedvoidonSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
publicstaticvoidbuildUserInfoDisplay(GraphUser user) {
appusuario=newUsuario(user.getName(),user.getUsername());
}
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uiHelper = newUiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
buttonLoginLogout = (LoginButton)findViewById(R.id.authButton);
buttonLoginLogout.setReadPermissions(Arrays.asList("user_status"));
btnSignIn = (SignInButton)findViewById(R.id.sign_in_button);
buttonLoginLogout.setVisibility(View.VISIBLE);
btnSignIn.setVisibility(View.VISIBLE);
plusClient = newPlusClient.Builder(this, this, this).setActions("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity")
.build();
connectionProgressDialog = newProgressDialog(this);
connectionProgressDialog.setMessage("Conectando...");
btnSignIn.setOnClickListener(newOnClickListener() {
@OverridepublicvoidonClick(View view)
{
if (!plusClient.isConnected())
{
if (connectionResult == null)
{
connectionProgressDialog.show();
}
else
{
try
{
connectionResult.startResolutionForResult(
MainActivity.this,
REQUEST_CODE_RESOLVE_ERR);
}
catch (SendIntentException e)
{
connectionResult = null;
plusClient.connect();
}
}
}
}
});
}
@OverrideprotectedvoidonStart()
{
super.onStart();
plusClient.connect();
}
@OverrideprotectedvoidonStop()
{
super.onStop();
plusClient.disconnect();
}
@OverridepublicbooleanonCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);
returntrue;
}
@OverridepublicvoidonConnected(Bundle connectionHint)
{
connectionProgressDialog.dismiss();
//nombreString accountName = plusClient.getAccountName();
//cuenta con mailPerson accountperson=plusClient.getCurrentPerson();
String personName = accountperson.getDisplayName();
Log.e("Google +", "Conectado");
//start another activity
}
@OverridepublicvoidonDisconnected()
{
Log.e("Google +", "Desconectado");
}
@OverridepublicvoidonConnectionFailed(ConnectionResult result) {
// TODO Auto-generated method stubif (connectionProgressDialog.isShowing())
{
if (result.hasResolution())
{
try
{
result.startResolutionForResult(this,
REQUEST_CODE_RESOLVE_ERR);
}
catch (SendIntentException e)
{
plusClient.connect();
}
}
}
connectionResult = result;
}
}
in the new activity place the same functions to validate the sesion and use
if (session.isOpened()) { }
to hide google login button or
publicvoidonConnected(Bundle connectionHint)
{
}
to hide facebook login button
Post a Comment for "Facebook Login/google Login - Same Activity?"