2016-05-05 15 views
0

Ich bin ein wenig verwirrt darüber, was ich authWithOAuthToken für Parameter passiere.Firebase Google Anmelden Implementierung

Bedeutet es das Webanwendungstoken, das von der Google Developer Console oder dem Android-Gerät bereitgestellt wird?

Ex Code:

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 ist der Schlüssel Client-ID von Google-Entwickler-Konsole zur Verfügung gestellt. Immer, wenn ich versuche, mich mit Google anzumelden, gebe ich onAuthenticationError ein und {"providerErrorInfo": {}} wird zum Loggen ausgedruckt. Gibt es etwas, was ich tun muss, um das richtige OAuth Token zu erhalten?

+0

Die Verknüpfung der Google-Authentifizierung mit Firebaseon Android ist nicht trivial, da Sie zunächst den Benutzer bei Google authentifizieren und diese Informationen dann an Firebase weitergeben müssen. Sie benötigen eine gewisse Variation des Codes in [der FirebaseUI-Bibliothek] (https://github.com/firebase/FirebaseUI-Android/tree/master/library/src/main/java/com/firebase/ui/auth/ Google). Alternativ können Sie * nur * FirebaseUI verwenden: https://github.com/firebase/FirebaseUI-Android#using-firebaseu-for-authentication –

Antwort

1

Der OAuth-Schlüssel, den Sie übergeben müssen, ist nicht die Schlüssel-Client-ID, die von GoogleDeveloperConsole bereitgestellt wird.

Um diesen Schlüssel abzurufen, müssen Sie die Laufzeit dafür fragen.

Werfen Sie einen Blick auf here, um ein Beispiel zu sehen.

0

Laden Sie den Quellcode von hier herunter (Firebase Google Login Android). In diesem Tutorial habe ich auch die Screenshots geteilt.

Fügen Sie diese Abhängigkeiten:

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(); 
    } 
} 

Danke!

+0

Was ist requestIdToken? und wo man es bekommt? Ich bin ein bisschen verwirrt –