2016-05-05 4 views
0

Я немного смущен тем, что я прохожу через authWithOAuthToken для параметра.Firebase Выполнение входа в систему Google

Это означает токен веб-приложения, предоставляемый консолью разработчика Google или Android-телефоном?

Ex код:

if(googleSignInResult.isSuccess()){ 
     Log.d(TAG,"Google Login Successful"); 
     GoogleSignInAccount account = googleSignInResult.getSignInAccount(); 
     final String idToken = account.getIdToken(); 
     final String name = account.getDisplayName(); 
     final String email = account.getEmail(); 
     root.authWithOAuthToken("google", Constants.GOOGLE_OAUTH_KEY, new Firebase.AuthResultHandler() { 
      @Override 
      public void onAuthenticated(AuthData authData) { 
       //Authenticated 


      } 

      @Override 
      public void onAuthenticationError(FirebaseError firebaseError) { 
       Log.d(TAG,firebaseError.getDetails()); 
      } 
     }); 

Constants.GOOGLE_OAUTH_KEY является ключом идентификатор клиента предоставляется консоли разработчика Google. Всякий раз, когда я пытаюсь войти в Google, я ввожу onAuthenticationError и {"providerErrorInfo": {}} печатается в журнал. Есть ли что-то, что мне нужно сделать, чтобы получить правильный токен OAuth?

+0

Проводка аутентификации Google для Firebaseon Android нетривиальна, так как сначала вам необходимо аутентифицировать пользователя с помощью Google, а затем передать эту информацию Firebase. Вам понадобится несколько вариантов кода в [библиотеке FirebaseUI] (https://github.com/firebase/FirebaseUI-Android/tree/master/library/src/main/java/com/firebase/ui/auth/ Google). В качестве альтернативы вы можете просто использовать * FirebaseUI: https://github.com/firebase/FirebaseUI-Android#using-firebaseui-for-authentication –

ответ

1

Ключ OAuth, который вы должны передать, не является ключевым идентификатором клиента, предоставленным GoogleDeveloperConsole.

Чтобы извлечь этот ключ, вы должны задать ему время выполнения.

Посмотрите на пример here.

0

Загрузить исходный код отсюда (Firebase Google Login Android). В этом уроке я также поделился снимками экрана.

Добавьте эти зависимости:

compile 'com.google.firebase:firebase-core:9.0.0' 
compile 'com.google.firebase:firebase-messaging:9.0.0' 
compile 'com.google.firebase:firebase-auth:9.0.0' 
compile 'com.github.bumptech.glide:glide:3.5.2' 
compile 'com.google.android.gms:play-services-auth:9.0.0' 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:orientation="vertical"> 


     <ImageView 
      android:layout_width="150dp" 
      android:id="@+id/iv_image" 
      android:src="@drawable/profileimage" 
      android:layout_gravity="center" 
      android:layout_height="150dp" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_marginTop="5dp" 
      android:layout_height="40dp"> 

      <TextView 
       android:layout_width="100dp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginLeft="10dp" 
       android:text="Name" 
       android:textColor="#000000" 
       android:textSize="15dp" /> 


      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginLeft="10dp" 
       android:text="Name" 
       android:id="@+id/tv_name" 
       android:textColor="#000000" 
       android:textSize="15dp" /> 

     </LinearLayout> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="#000000"></View> 


     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="40dp"> 

      <TextView 
       android:layout_width="100dp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginLeft="10dp" 
       android:text="Email" 
       android:textColor="#000000" 
       android:textSize="15dp" /> 


      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_marginLeft="10dp" 
       android:text="Email" 
       android:id="@+id/tv_email" 
       android:textColor="#000000" 
       android:textSize="15dp" /> 

     </LinearLayout> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="#000000"></View> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="50dp" 
     android:layout_alignParentBottom="true" 
     android:layout_margin="10dp" 
     android:background="#E02F2F" 
     android:orientation="horizontal"> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/iv_google" 
      android:src="@drawable/google_plus" /> 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_gravity="center" 
      android:id="@+id/tv_google" 
      android:gravity="center_vertical" 
      android:text="Sign in with Google" 
      android:textColor="#FFFFFF" 
      android:textSize="20dp" /> 

    </LinearLayout> 
</RelativeLayout> 

MainActivity.java

package com.deepshikha.googlepluslogin; 

import android.app.ProgressDialog; 
import android.content.Intent; 
import android.support.annotation.NonNull; 
import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.bumptech.glide.Glide; 
import com.google.android.gms.auth.api.Auth; 
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; 
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; 
import com.google.android.gms.auth.api.signin.GoogleSignInResult; 
import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Status; 
import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthCredential; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 
import com.google.firebase.auth.FirebaseUser; 
import com.google.firebase.auth.GoogleAuthProvider; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener { 

    private static final int RC_SIGN_IN = 9001; 
    private FirebaseAuth mAuth; 
    private FirebaseAuth.AuthStateListener mAuthListener; 
    private GoogleApiClient mGoogleApiClient; 
    ImageView iv_google; 
    ProgressDialog dialog; 
    ImageView iv_image; 

    boolean boolean_google; 
    TextView tv_name, tv_email, tv_google; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     init(); 
     listener(); 

    } 

    private void init() { 

     tv_name = (TextView) findViewById(R.id.tv_name); 
     tv_email = (TextView) findViewById(R.id.tv_email); 
     tv_google = (TextView) findViewById(R.id.tv_google); 
     iv_google = (ImageView) findViewById(R.id.iv_google); 
     iv_image = (ImageView)findViewById(R.id.iv_image); 

     dialog = new ProgressDialog(MainActivity.this); 
     dialog.setMessage("Loading.."); 
     dialog.setTitle("Please Wait"); 
     dialog.setCancelable(false); 

     mAuth = FirebaseAuth.getInstance(); 
     mAuthListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d("LoginActivity", "onAuthStateChanged:signed_in:" + user.getUid()); 
       } else { 
        // User is signed out 
        Log.d("LoginActivity", "onAuthStateChanged:signed_out"); 
       } 
       // [START_EXCLUDE] 
       updateUI(user); 
       // [END_EXCLUDE] 
      } 
     }; 


     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
       .requestIdToken(getString(R.string.default_web_client_id)) 
       .requestEmail() 
       .build(); 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .enableAutoManage(MainActivity.this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
       .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
       .build(); 
    } 

    private void listener() { 
     iv_google.setOnClickListener(this); 
     tv_google.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     switch (view.getId()) { 
      case R.id.iv_google: 
       break; 
      case R.id.tv_google: 
       if (boolean_google){ 
        signOut(); 
        tv_name.setText(""); 
        tv_email.setText(""); 
        boolean_google=false; 
        Glide.with(MainActivity.this).load(R.drawable.profileimage).into(iv_image); 
       }else { 
        signIn(); 
       } 
       break; 
     } 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
     if (requestCode == RC_SIGN_IN) { 
      GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
       // Google Sign In was successful, authenticate with Firebase 
       GoogleSignInAccount account = result.getSignInAccount(); 
       firebaseAuthWithGoogle(account); 
      } else { 
       // Google Sign In failed, update UI appropriately 
       // [START_EXCLUDE] 
       updateUI(null); 
       // [END_EXCLUDE] 
      } 
     } 

    } 

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
     Log.d("LoginActivity", "firebaseAuthWithGoogle:" + acct.getId()); 
     // [START_EXCLUDE silent] 
     try { 

      dialog.show(); 
     } catch (Exception e) { 

     } 
     // [END_EXCLUDE] 

     AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
     mAuth.signInWithCredential(credential) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         Log.d("LoginActivity", "signInWithCredential:onComplete:" + task.isSuccessful()); 

         // If sign in fails, display a message to the user. If sign in succeeds 
         // the auth state listener will be notified and logic to handle the 
         // signed in user can be handled in the listener. 
         if (!task.isSuccessful()) { 
          Log.w("LoginActivity", "signInWithCredential", task.getException()); 
          Toast.makeText(MainActivity.this, "Authentication failed.", 
            Toast.LENGTH_SHORT).show(); 
         } 
         // [START_EXCLUDE] 

         try { 

          dialog.dismiss(); 
         } catch (Exception e) { 

         } 
         // [END_EXCLUDE] 
        } 
       }); 
    } 

    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

    private void signOut() { 
     // Firebase sign out 
     try { 
      mAuth.signOut(); 

      // Google sign out 
      Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
        new ResultCallback<Status>() { 
         @Override 
         public void onResult(@NonNull Status status) { 
          updateUI(null); 
         } 
        }); 
     } catch (Exception e) { 

     } 
    } 

    private void updateUI(FirebaseUser user) { 
     try { 
      dialog.dismiss(); 
     } catch (Exception e) { 

     } 

     if (user != null) { 
      String str_emailgoogle = user.getEmail(); 
      Log.e("Email", str_emailgoogle); 
      tv_email.setText(str_emailgoogle); 
      tv_name.setText(user.getDisplayName()); 
      boolean_google=true; 
      tv_google.setText("Sign out from Google"); 

      Glide.with(MainActivity.this).load(user.getPhotoUrl()).into(iv_image); 


      Log.e("Profile", user.getPhotoUrl() + ""); 

     } else { 

     } 
    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
     // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
     // be available. 
     Log.d("LoginActivity", "onConnectionFailed:" + connectionResult); 
     Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); 
    } 
} 

Спасибо!

+0

Что такое requestIdToken? и где его получить? Я немного смущен –

Смежные вопросы