Android - conflicto con login facebook y login google. [EDITADO!!]

 
Vista:
sin imagen de perfil

conflicto con login facebook y login google. [EDITADO!!]

Publicado por sergi (1 intervención) el 30/09/2017 13:10:12
Hola a todos, estoy intentando incluir en mi app el poderse logear con facebook o con google+, pero el caso es que se crea un conflicto entre los dos que hace que el login de facebook funcione pero el de google no,
Concretamente lo que ocurre es que al iniciar la app se abre el LoginActivity, cuando me logeo con facebook, si el logeo es correcto me lleva al mainActivity, sino no.

Pero en cambio el boton de logeo de google, me lleva tambien al mainactivity pero me retorna a la pantallad e login otra vez, se que va al main y vuelve porque me da tiempo a ver el main durante unas decimas de segundo.

Pongo el codigo a ver si podeis ayudarme muchas gracias.


LoginActivity



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
public class LoginActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
 
 /*  facebook -------------------------------------------------------------------------*/
    private LoginButton loginButton;
    private CallbackManager callbackManager;
 
   /*  Google+ -------------------------------------------------------------------------*/
    private GoogleApiClient googleApiClient;
    private SignInButton signInButton;
    public static final int SIGN_IN_CODE =777;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
 
/*  facebook -------------------------------------------------------------------------*/
        callbackManager = CallbackManager.Factory.create();
        loginButton = (LoginButton) findViewById(R.id.login_button);
 
 
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                goMainScreen();
            }
 
            @Override
            public void onCancel() {
                Toast.makeText(getApplicationContext(), R.string.cancel_login, Toast.LENGTH_SHORT);
            }
 
            @Override
            public void onError(FacebookException error) {
                Toast.makeText(getApplicationContext(), R.string.error_login, Toast.LENGTH_SHORT);
            }
        } );
 
 
 
 
        /*  Google+ -------------------------------------------------------------------------*/
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
 
        googleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();
 
            signInButton = (SignInButton) findViewById(R.id.signInButon);
            signInButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
                    startActivityForResult(intent, SIGN_IN_CODE );
                }
            });
 
 
    }/*  aqui se cierra el oncreate */
 
 
 
 
 
    /*  goMainScreen lo usa tanto google+ como facebook -------------------------------------------------------------------------*/
 
    private void goMainScreen(){
 
        Intent intent = new Intent(this, MainActivity.class);
 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  |
                Intent.FLAG_ACTIVITY_CLEAR_TASK |
                Intent.FLAG_ACTIVITY_NEW_TASK);
 
        startActivity(intent);
    }
 
 
    /*  onActivityResult lo usa tanto google+ como facebook --------------------------------------------------------------------*/
 
    @Override
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
 
            /*  Facebook -------------------------------------------------------------------------*/
        callbackManager.onActivityResult(requestCode, resultCode, data);
 
 
 
 
 
 
        /*  google+ -------------------------------------------------------------------------*/
 
        if(requestCode == SIGN_IN_CODE){
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handlesSignInResult(result);
        }
 
    }
 
         private void handlesSignInResult(GoogleSignInResult result) {
             if (result.isSuccess()) {
                        goMainScreendos();
             } else {
                 Toast.makeText(this, R.string.not_log_in, Toast.LENGTH_SHORT).show();
             }
         }
 
 
    /*  Google+ -------------------------------------------------------------------------*/
 
 
 
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
 
    }
 
}


Mainactivity

cabe decir que en el main estoy recuperando inforamcion del usuario de google+ como la foto id y mail. por eso hay mas codigo de uno que del otro

el conflicto se crea en en Main activity, concretamente en la linia 17, si comento la llamada al metodo goLoginScreen(); el login de google funciona pero entonces el de facebook no




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
 
    private GoogleApiClient googleApiClient;
 
    private TextView nameTextView;
    private TextView emailTextView;
    private TextView idTextView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.activity_main);
 
/*facebook---------------------------------------------------------------------------------------------------*/
       if(AccessToken.getCurrentAccessToken()==null){
            goLoginScreen();
        }
 
/*google------------------------------------------------------------------------------------------------------*/
        nameTextView = (TextView) findViewById(R.id.nameTextView);
        emailTextView = (TextView) findViewById(R.id.nameTextView);
        idTextView = (TextView) findViewById(R.id.nameTextView);
 
 
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
 
 
 
 
        googleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();
 
    }
 
    @Override
    protected void onStart(){
        super.onStart();
        OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(googleApiClient);
        if(opr.isDone()){
             GoogleSignInResult result = opr.get();
            handlesSingInResult(result);
        }else{
            opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                @Override
                public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
                    handlesSingInResult(googleSignInResult);
                }
            });
         }
    }
 
    private void handlesSingInResult(GoogleSignInResult result) {
            if(result.isSuccess()){
                GoogleSignInAccount account = result.getSignInAccount();
 
                nameTextView.setText(account.getDisplayName());
                emailTextView.setText(account.getEmail());
                idTextView.setText(account.getId());
 
                Log.d("MIAPP" , account.getPhotoUrl().toString());
            }else{
                goLoginScreen();
            }
 
    }
 
 
    private void logOut(View view){
 
    }
 
    private void revoke(View view){
 
    }
 
 
 
    private void goLoginScreen(){
        Intent intent = new Intent(this, LoginActivity.class);
 
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  |
                Intent.FLAG_ACTIVITY_CLEAR_TASK |
                Intent.FLAG_ACTIVITY_NEW_TASK);
 
        startActivity(intent);
    }
 
 
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
 
    }
}

no se si es necesario pero pongo el manifest



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="***************">
 
    <uses-permission android:name="android.permission.INTERNET" />
 
    <application
        android:name=".********App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
 
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
 
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
 
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".LoginActivity" />
    </application>
 
</manifest>



muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder