Verwenden Sie diesen Code, um die Google Mail-Anmeldung mit Firebase zu integrieren. Wenn sie sich bereits einloggen, wird sie zu homeScreen navigieren und wenn sie nicht vorher angemeldet wurde, erscheint eine E-Mail, um sich anzumelden sobald sie sich angemeldet hat.
Fügen Sie hier in string.xml verwendet server_client_id:
getString (R.string.server_client_id)
Code:
MainActivity.java
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
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.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
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;
import smart.works.android.bharat.com.codeplay.ui.homeScreen.CodePlayActivity;
import smart.works.android.bharat.com.codeplay.R;
import smart.works.android.bharat.com.codeplay.Utils.AppConstants;
import smart.works.android.bharat.com.codeplay.Utils.PreferenceUtils;
public class MainActivity extends AppCompatActivity
implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener {
private static final int RC_SIGN_IN = 124;
private static final String TAG = "MainActivity";
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth mAuth;
private ProgressBar mProgressBar;
private SignInButton mSignInButton;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
initUi();
setupUi();
}
private void setupUi() {
GoogleSignInOptions gso =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(
getString(R.string.server_client_id)).requestEmail().build();
mGoogleApiClient =
new GoogleApiClient.Builder(this).enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
// Set the dimensions of the sign-in button.
mSignInButton = (SignInButton) findViewById(R.id.sign_in_button);
mSignInButton.setSize(SignInButton.SIZE_STANDARD);
findViewById(R.id.sign_in_button).setOnClickListener(this);
mAuth = FirebaseAuth.getInstance();
}
private void initUi() {
mProgressBar = (ProgressBar) findViewById(R.id.sign_in_progress);
mSignInButton = (SignInButton) findViewById(R.id.sign_in_button);
}
@Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
}
}
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void showProgress() {
mProgressBar.setVisibility(View.VISIBLE);
mSignInButton.setEnabled(false);
}
private void cancelProgress() {
mProgressBar.setVisibility(View.GONE);
mSignInButton.setEnabled(true);
}
@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) {
showProgress();
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result) {
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
//updateUI(true);
} else {
cancelProgress();
Toast.makeText(MainActivity.this, "sign in failed ! Try Again ", Toast.LENGTH_SHORT).show();
// Signed out, show unauthenticated UI.
//updateUI(false);
}
}
@Override public void onStart() {
super.onStart();
// Check if user is signed in (non-null) and update UI accordingly.
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
forwardToHomeScreen(currentUser);
}
//updateUI(currentUser);
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override public void onComplete(@NonNull Task<AuthResult> task) {
cancelProgress();
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
Log.d(TAG, "signInWithCredential:success");
FirebaseUser user = mAuth.getCurrentUser();
forwardToHomeScreen(user);
} else {
// If sign in fails, display a message to the user.
Log.w(TAG, "signInWithCredential:failure", task.getException());
Toast.makeText(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT)
.show();
//updateUI(null);
}
// ...
}
});
}
private void forwardToHomeScreen(FirebaseUser user) {
PreferenceUtils preferenceUtils = new PreferenceUtils(this);
preferenceUtils.getPrefEditor().putString(AppConstants.USER_ID, user.getUid()).apply();
Intent i = new Intent(this, CodePlayActivity.class);
i.putExtra(AppConstants.USER_NAME, user.getDisplayName());
i.putExtra(AppConstants.USER_EMAIL, user.getEmail());
i.setData(user.getPhotoUrl());
startActivity(i);
finish();
}
}
actvity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/nav_bg"
android:orientation="vertical"
>
<ImageView
android:id="@+id/icon"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:layout_marginTop="100dp"
android:contentDescription="@string/app_icon"
android:src="@mipmap/ic_launcher"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/icon"
android:layout_centerInParent="true"
android:layout_marginBottom="60dp"
android:text="@string/app_name"
android:textColor="#FFFFFF"
android:textSize="16sp"
android:textStyle="bold"
/>
<ProgressBar
android:id="@+id/sign_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:indeterminate="true"
android:visibility="gone"
/>
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginBottom="100dp"
/>
</RelativeLayout>
Das beantwortet meine Frage nicht wirklich. Also kann der gesamte Code, den ich in meiner ersten App gemacht habe, nicht in einer Firebase App verwendet werden? Und mein Fragment soll in beiden Apps funktionieren, also sollte ich meinen gesamten Authentifizierungscode auf die Firebase-Authentifizierung umschalten und Firebase dann in meine Anwendung integrieren? – Diiscord
Sie müssen Ihren vorherigen Authentifizierungscode nicht ändern, wenn er ordnungsgemäß funktioniert. Wenn Sie in der Methode handleSignInResult() Ergebnisse erzielen, wählen Sie die Methode firebaseAuthWithGoogle (GoogleSignInAccount acct). Siehe meinen Code. Verwenden Sie Ihre neueste google_services.json. Aktivieren Sie die Google Mail-API in der API-Konsole. Fügen Sie auch Ihr Debug und veröffentlichte SHA1 in API hinzu. Nur Debug SHA1 funktioniert auch während der Entwicklung –
Vielen Dank für Ihre Antworten, das Problem ist, dass ich keine HandleSignInResult-Methode und ein GoogleSignInAccount. Ich habe diesen Quickstart https://developers.google.com/gmail/api/quickstart/android verwendet, sodass ich ein GoogleAccountCredential-Konto habe. – Diiscord