Android studio 如何处理onActivityResult()的多个请求\u代码
我有Facebook登录按钮和Google登录按钮。我正在学习一个关于如何集成facebook登录的教程,并在onActivityResult中创建了切换案例,但facebook按钮不起作用。我最后试过的一件事是,为每个按钮启动ForActivitResult(),但它也无法工作。请帮忙 这是我的密码 LoginActivity.javaAndroid studio 如何处理onActivityResult()的多个请求\u代码,android-studio,facebook-login,facebook-android-sdk,onactivityresult,startactivityforresult,Android Studio,Facebook Login,Facebook Android Sdk,Onactivityresult,Startactivityforresult,我有Facebook登录按钮和Google登录按钮。我正在学习一个关于如何集成facebook登录的教程,并在onActivityResult中创建了切换案例,但facebook按钮不起作用。我最后试过的一件事是,为每个按钮启动ForActivitResult(),但它也无法工作。请帮忙 这是我的密码 LoginActivity.java package com.gmail.restaurantsystemclient; import androidx.annotation.NonNu
package com.gmail.restaurantsystemclient;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.style.StyleSpan;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.squareup.picasso.Picasso;
//import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
//import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
//import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import org.json.JSONException;
import org.json.JSONObject;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.BreakIterator;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import static android.widget.Toast.*;
public class LoginActivity extends AppCompatActivity {
private LoginButton nFbBtn;
private ImageButton nGooBtn;
private TextInputEditText nEmailInput;
private TextInputEditText nPasswordInput;
private TextView nCreateAccountBtn;
private TextView ntxt;
//Firebase
private FirebaseAuth mAuth;
//Google
private GoogleSignInClient mGoogleSignInClient;
private GoogleSignInAccount googleSignInAccount;
final private static int GO_RC_SIGN_IN = 0;
// Facebook
private CallbackManager callbackManager;
private LoginManager loginManager;
private AccessToken accessToken;
private GraphRequest graphRequest;
private LoginResult loginResult;
final private static int FB_RC_SIGN_IN = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
/* - - - - - INITIALIZATION - - - - - */
// Facebook
FacebookSdk.sdkInitialize(LoginActivity.this); // FB SDK
callbackManager = CallbackManager.Factory.create();
// Firebase
mAuth = FirebaseAuth.getInstance();
// Image
//ImageView nLogoImgView = findViewById(R.id.logoImgView);
// Inputs
nEmailInput = findViewById(R.id.emailEditTxt);
nPasswordInput = findViewById(R.id.nPasswordEditTxt);
// Buttons
nCreateAccountBtn = findViewById(R.id.createAccountBtn);
nGooBtn = findViewById(R.id.gooBtn);
nFbBtn = findViewById(R.id.fbBtn);
// TextViews
ntxt = findViewById(R.id.txt);
//nLogoImgView.setImageResource(R.drawable.ic_logo_01);
whenLoginBtnClicked();
//nCreateAccountBtn.setText(Objects.requireNonNull(mAuth.getCurrentUser()).getIdToken(true).toString());
//whenCreateAccountTextIsClicked();
whenUserSignInWithGoogle();
// Initialize Facebook Login button
callbackManager = CallbackManager.Factory.create();
nFbBtn.setReadPermissions("email", "public_profile");
nFbBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Intent fb = new Intent();
startActivityForResult(fb,FB_RC_SIGN_IN);
//Log.d("LoginActivity.this", "facebook:onSuccess:" + loginResult);
handleFacebookAccessToken(loginResult.getAccessToken());
Toast.makeText(LoginActivity.this, "success",
LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Toast.makeText(LoginActivity.this, "cancel",
LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException error) {
Toast.makeText(LoginActivity.this, "error",
LENGTH_SHORT).show();
}
});
}
private void handleFacebookAccessToken(AccessToken token) {
//Log.d("TAG", "handleFacebookAccessToken:" + token);
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
//Log.d("TAG", "signInWithCredential:success");
Toast.makeText(LoginActivity.this, "Authentication success",
LENGTH_LONG).show();
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
// If sign in fails, display a message to the user.
//Log.w("TAG", "signInWithCredential:failure", task.getException());
Toast.makeText(LoginActivity.this, "Authentication failed.",
Toast.LENGTH_SHORT).show();
updateUI(null);
}
}
});
}
private void whenUserSignInWithGoogle() {
nGooBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent goo = new Intent();
startActivityForResult(goo,GO_RC_SIGN_IN);
// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
// Build a GoogleSignInClient with the options specified by gso.
mGoogleSignInClient = GoogleSignIn.getClient(LoginActivity.this, gso);
// Check for existing Google Sign In account, if the user is already signed in
// the GoogleSignInAccount will be non-null.
googleSignInAccount = GoogleSignIn.getLastSignedInAccount(LoginActivity.this);
updateUIGoogleSignIn(googleSignInAccount);
signIn();
}
});
}
private void whenLoginBtnClicked() {
Button nLoginBtn = findViewById(R.id.loginBtn);
nLoginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String email = String.valueOf(nEmailInput.getText());
String password = String.valueOf(nPasswordInput.getText());
loginUser(email, password);
}
});
}
private void whenCreateAccountTextIsClicked() {
final SpannableStringBuilder sb = new SpannableStringBuilder(nCreateAccountBtn.getText());
final StyleSpan bss = new StyleSpan(Typeface.BOLD);
sb.setSpan(bss, 5, 22, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
nCreateAccountBtn.setText(sb);
nCreateAccountBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(registerIntent);
}
});
}
private void loginUser(String email, String password) {
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
} else {
// If sign in fails, display a message to the user.
makeText(LoginActivity.this, "Authentication failed.",
LENGTH_SHORT).show();
updateUI(null);
}
// ...
}
});
}
private void updateUI(FirebaseUser user) {
if(user != null)
{
// check for the user in the database
}
else
{
}
}
private void updateUIGoogleSignIn(GoogleSignInAccount account) {
if(account != null)
{
// check for the user in the database
Intent mainIntent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(mainIntent);
}
else
{
Toast.makeText(this, "a toast message in updateUIGoogleSignIn", LENGTH_LONG).show();
}
}
private void firebaseAuthWithGoogle(String idToken) {
AuthCredential credential = GoogleAuthProvider.getCredential(idToken, null);
mAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Sign in success, update UI with the signed-in user's information
//Log.d(TAG, "signInWithCredential:success");
//FirebaseUser user = mAuth.getCurrentUser();
//updateUI(user);
} else {
// If sign in fails, display a message to the user.
//Log.w(TAG, "signInWithCredential:failure", task.getException());
//Snackbar.make(mBinding.mainLayout, "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
//updateUI(null);
}
// ...
}
});
}
private void handleSignInResult(Task<GoogleSignInAccount> completedTask)
{
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class);
String idToken = account.getIdToken();
// Send Id Token to the backend and validate here
// Signed in successfully, show authenticated UI.
updateUIGoogleSignIn(account);
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information.
//Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
updateUI(null);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
{
case GO_RC_SIGN_IN:
// Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
if (requestCode == GO_RC_SIGN_IN) {
Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
if (task.isSuccessful())
{
try {
// Google Sign In was successful, authenticate with Firebase
GoogleSignInAccount account = task.getResult(ApiException.class);
//Log.d(TAG, "firebaseAuthWithGoogle:" + account.getId());
firebaseAuthWithGoogle(Objects.requireNonNull(account).getIdToken());
} catch (ApiException e) {
// Google Sign In failed, update UI appropriately
//Log.w(TAG, "Google sign in failed", e);
// ...
}
}
else
{
}
}
break;
case FB_RC_SIGN_IN:
callbackManager.onActivityResult(requestCode, resultCode, data);
break;
}
}
private void signIn() {
Intent signInIntent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(signInIntent, GO_RC_SIGN_IN);
}
}
package com.gmail.restaurantsystemclient;
导入androidx.annotation.NonNull;
导入androidx.appcompat.app.appcompat活动;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Typeface;
导入android.graphics.drawable.drawable;
导入android.media.Image;
导入android.os.Bundle;
导入android.text.Spannable;
导入android.text.SpannableStringBuilder;
导入android.text.TextUtils;
导入android.text.style.StyleSpan;
导入android.util.Log;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ImageButton;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.facebook.AccessToken;
导入com.facebook.CallbackManager;
导入com.facebook.facebook回调;
导入com.facebook.facebook异常;
导入com.facebook.FacebookSdk;
导入com.facebook.GraphRequest;
导入com.facebook.GraphResponse;
导入com.facebook.login.LoginManager;
导入com.facebook.login.LoginResult;
导入com.facebook.FacebookSdk;
导入com.facebook.appevents.AppEventsLogger;
导入com.facebook.login.widget.LoginButton;
导入com.google.android.gms.auth.api.signin.GoogleSignIn;
导入com.google.android.gms.auth.api.signin.GoogleSignInAccount;
导入com.google.android.gms.auth.api.signin.GoogleSignInClient;
导入com.google.android.gms.auth.api.signin.GoogleSignInOptions;
导入com.google.android.gms.common.api.ApiException;
导入com.google.android.gms.tasks.OnCompleteListener;
导入com.google.android.gms.tasks.Task;
导入com.google.android.material.snackbar.snackbar;
导入com.google.android.material.textfield.textinputtext;
导入com.google.firebase.auth.AuthCredential;
导入com.google.firebase.auth.AuthResult;
导入com.google.firebase.auth.FacebookAuthProvider;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.auth.GoogleAuthProvider;
导入com.squareup.picasso.picasso;
//导入com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
//导入com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
//导入com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.net.MalformedURLException;
导入java.net.URL;
导入java.text.BreakIterator;
导入java.util.array;
导入java.util.List;
导入java.util.Objects;
导入静态android.widget.Toast.*;
公共类LoginActivity扩展了AppCompatActivity{
私人登录按钮nFbBtn;
私人图像按钮;
私有文本输入文本输入;
私有文本输入文本nPasswordInput;
私有文本视图nCreateAccountBtn;
私有文本视图ntxt;
//火基
私人消防队;
//谷歌
私人谷歌签名客户端mGoogleSignInClient;
私人谷歌签名账号谷歌签名账号;
最终私有静态int GO\u RC\u SIGN\u IN=0;
//脸谱网
私人CallbackManager CallbackManager;
私有LoginManager LoginManager;
专用AccessToken AccessToken;
私人攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬攀爬;
私人登录结果登录结果;
最终专用静态int FB_RC_SIGN_IN=2;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u登录);
/*------初始化----*/
//脸谱网
FacebookSdk.sdkinInitialize(LoginActivity.this);//FB SDK
callbackManager=callbackManager.Factory.create();
//火基
mAuth=FirebaseAuth.getInstance();
//形象
//ImageView nlogioimgView=findViewById(R.id.logoImgView);
//投入
nEmailInput=findViewById(R.id.emailEditTxt);
nPasswordInput=findviewbyd(R.id.nPasswordEditTxt);
//钮扣
nCreateAccountBtn=findViewById(R.id.createAccountBtn);
nGooBtn=findViewById(R.id.gooBtn);
nFbBtn=findViewById(R.id.fbBtn);
//文本视图
ntxt=findviewbyd(R.id.txt);
//nLogoImgView.setImageResource(R.drawable.ic_徽标_01);
当登录时取消勾选();
//nCreateAccountBtn.setText(Objects.requireNonNull(mAuth.getCurrentUser()).getIdToken(true.toString());
//WhenCreateCountTextIsClicked();
当使用Google()进行识别时;
//初始化Facebook登录按钮
callbackManager=callbackManager.Factory.create();
nFbBtn.setReadPermissions(“电子邮件”、“公共档案”);
nFbBtn.registerCallback(callbackManager,newfacebookcallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
意图fb=新意图();
startActivityForResult(fb、fb\u RC\u登录);
//Log.d(“LoginActivity.this”,“facebook:onSuccess:+loginResult”);
handleFacebookAccessToken(loginResult.getAccessToken());
Toast.makeText(LoginActivity.this,“success”,
长度(短)。显示();
}
@凌驾
公开作废{
Toast.makeText(LoginActivity.this,“取消”,
长度(短)。显示();
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(LoginActivity.this,“错误”,
长度(短)。显示();
}
});
}
私有无效handleFacebookAccessToken(AccessToken令牌){
//日志d(“标签”、“手柄”
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LoginActivity">
<ImageView
android:id="@+id/logoImgView"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginTop="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_logo_01" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/emailEditLayout"
android:layout_width="@dimen/login_reg_text_edit_width"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginTop="50dp"
android:layout_marginEnd="1dp"
android:background="@drawable/edit_text_backgroung"
android:elevation="@dimen/elevation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/logoImgView">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/emailEditTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:hint="@string/hint_email"
android:paddingHorizontal="20dp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/passwordEditLayout"
android:layout_width="@dimen/login_reg_text_edit_width"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="1dp"
android:background="@drawable/edit_text_backgroung"
android:elevation="@dimen/elevation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/emailEditLayout">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/nPasswordEditTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
android:hint="@string/hint_password"
android:paddingHorizontal="20dp" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/loginBtn"
android:layout_width="@dimen/login_reg_btn_width"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:background="@drawable/login_btn"
android:text="@string/login"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordEditLayout" />
<TextView
android:id="@+id/createAccountBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="105dp"
android:layout_marginTop="35dp"
android:layout_marginEnd="128dp"
android:text="@string/new_create_an_account"
android:textColor="@color/colorAccent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginBtn" />
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginTop="40dp"
android:layout_marginEnd="1dp"
android:text="@string/or_continue_with"
android:textColor="@color/colorPrimary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/createAccountBtn" />
<com.facebook.login.widget.LoginButton
android:id="@+id/fbBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginEnd="130dp"
android:elevation="@dimen/elevation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txt" />
<ImageButton
android:id="@+id/gooBtn"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="130dp"
android:layout_marginTop="30dp"
android:background="@drawable/google_signin_btn"
android:elevation="@dimen/elevation"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/txt"
app:srcCompat="@drawable/ic_google_icon" />
</androidx.constraintlayout.widget.ConstraintLayout>