Код запроса для входа в Facebook и входа в Google Plus - PullRequest
0 голосов
/ 25 апреля 2020

Я написал этот вопрос 2 дня go. метод onActivityResult для Google + и Facebook

И я подумал, что, возможно, я могу создать два кода запроса, один для Facebook и один для Google +, а затем в методе OnActivityResult, я могу создать переключатель регистр case или else if с использованием кодов запроса. Но я не знаю, как это сделать. Как я могу получить намерение входа в Facebook. Может ли кто-нибудь помочь мне с этой строкой кода, если то, что я думаю, действительно может работать ...

public abstract class google_abstract extends Activity {

    CallbackManager callbackManager;
    FirebaseAuth auth;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 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)
                .requestEmail()
                .build();

        // Build a GoogleSignInClient with the options specified by gso.
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("Success", "Login");

                    }
                    @Override
                    public void onCancel() {
                        Toast.makeText(getApplicationContext(), "Login Cancel", Toast.LENGTH_LONG).show();
                    }
                    @Override
                    public void onError(FacebookException exception) {
                        Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });
    }

    int RC_SIGN_IN_G = 0;
    int RC_SIGN_IN_F = 0;
    GoogleSignInClient mGoogleSignInClient;

    public void signIn_g() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN_G);
    }

    **public void signIn_f(){
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN_F);
    }**

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN_G) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }

        else if (requestCode == RC_SIGN_IN_F) {
            callbackManager.onActivityResult(requestCode,resultCode,data );
            LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email", "public_profile"));
        }
    }

    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            // Signed in successfully, show authenticated UI.
            startActivity(new Intent(this, tags.class));
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
            Log.w("Google Sign In Error", "signInResult:failed code=" + e.getStatusCode());
            //            pb.setVisibility(View.GONE);
            Toast.makeText(getApplicationContext(), "Failed", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void onStart() {
        // Check for existing Google Sign In account, if the user is already signed in
        // the GoogleSignInAccount will be non-null.
        GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
        if (account != null) {
            startActivity(new Intent(this, tags.class));
        }
        super.onStart();
    }

    private void handleFacebookToken(AccessToken accessToken)
    {
        AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getToken());
        auth.signInWithCredential(credential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if(task.isSuccessful())
                {
                    FirebaseUser myuserobj=auth.getCurrentUser();
                    updateUI(myuserobj);
                }
                else
                {
                    Toast.makeText(getApplicationContext(),"could not register to firebase",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void updateUI(FirebaseUser myuserobj) {

        String e_mail= myuserobj.getEmail();
    }
}

1 Ответ

1 голос
/ 25 апреля 2020

В настоящее время вы сохраняете тот же самый int (здесь 0), поэтому onActivityResult всегда будет go в первом операторе if. Решение - Во-первых, вам нужно принять целочисленные значения в глобальном масштабе, например:

int RC_SIGN_IN_G = 0;

Для Google вам нужно иметь код запроса, а затем извлечь его в onActivityResult и проверить, чтобы fb включил эту строку перед супер вызовом

callbackManager.onActivityResult(requestCode, resultCode, data);

и удалить код запроса fb из onActivityResult
для вызова входа в систему fb вам нужно найти кнопку входа fb по ее идентификатору и присоединить прослушиватель обратного вызова

Окончательный код onActivityResult находится здесь

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

    //include this too
    callbackManager.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN_G) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}  

РЕДАКТИРОВАТЬ КОД ЛОГИРОВАНИЯ FB ДОБАВЛЕНО
для Google оставьте его таким же, для fb используйте этот
код доступа fb

loginButton = (LoginButton) findViewById(R.id.login_button); 
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        // App code
    }

    @Override
    public void onCancel() {
        // App code
    }

    @Override
    public void onError(FacebookException exception) {
        // App code
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...