当前位置: 首页 > 知识库问答 >
问题:

Android Firebase Facebook登录显示注销按钮,当应用程序重新打开时

赏梓
2023-03-14
public class MainActivity extends AppCompatActivity {

    private LoginButton facebookloginButton;
    private CallbackManager callbackManager;
    private FirebaseAuth mAuth;

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

        facebookloginButton=(LoginButton)findViewById(R.id.facebook_login_button);
        callbackManager=CallbackManager.Factory.create();
        facebookloginButton.setReadPermissions("email", "public_profile");
        facebookloginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                handleFacebookAccessToken(loginResult.getAccessToken());
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(getApplicationContext(), "Error",Toast.LENGTH_LONG).show();
            }
        });

    }

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

    private void handleFacebookAccessToken(AccessToken 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

                            FirebaseUser user = mAuth.getCurrentUser();
                            Intent intent=new Intent(getApplicationContext(),NextActivity.class);
                            //  intent.putExtra("NAME",user.getDisplayName());
                            startActivity(intent);
                            finish();

                        } else {
                            // If sign in fails, display a message to the user.

                            Toast.makeText(getApplicationContext(), "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();

                        }

                        // ...
                    }
                });
    }

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
//        currentUser.getDisplayName();
    }

}

如果应用程序关闭并重新打开,我想让它显示NextActivity

共有1个答案

东方谦
2023-03-14

从Facebook成功登录后,您可以将Auth令牌保存在应用程序的Shared Preferences设置中,然后无论何时启动应用程序,您都可以检查存储中是否保存了令牌,如果这意味着用户已经登录,并将其直接重定向到下一页或配置文件页。

以下是您可以做的小片段:

final static String PREFS_NAME = "AUTH" 

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
        setContentView(R.layout.activity_main);

        // check if user is already logged in
        // i.e. auth token is present or not
        String token = settings.getString("auth_token", null);
        // means user is logged in token was found
        if (token != null) {
            AUTH_TOKEN = token;
            startActivity(new Intent(MainActivity.this, ProfileActivity.class));
        }
    }

        // YOUR REST OF THE CODE ....

});

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

        // SAVE THE USER DETAILS OR PART OF IT IN SHARED PREFS
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("USER", user);
        editor.apply();

        Intent intent=new Intent(getApplicationContext(),NextActivity.class);
        //  intent.putExtra("NAME",user.getDisplayName());
        startActivity(intent);
        finish();

    } else {
        // If sign in fails, display a message to the user.

        Toast.makeText(getApplicationContext(), "Authentication failed.",
                Toast.LENGTH_SHORT).show();

    }

    // ...
}

这将起作用,因为每次在oncreate方法中启动应用程序时,如果auth文件存在,它将直接将用户发送到nextactivity

 类似资料:
  • } 以下是我从logcat收到的错误:

  • 我有一个名为logIn的活动,它会导致一个名为users not的活动。我希望防止users活动返回到logIn活动,因此a在users活动中添加了以下代码: 它工作得很好,但现在我希望用户能够注销,这样他就可以通过单击按钮返回到登录活动,我在用户活动中添加了一个按钮,并添加了onClickListener,如下所示: 但是,当我添加onClickListener时,当我单击登录按钮时,应用程序崩

  • 问题内容: 对于典型的最典型的面向Internet的网站,当您通过关闭选项卡( 无需注销 )登录并离开该网站(然后 注销 ),然后再次访问时,可能不需要您重新指定凭据或登录,您可以直接登录。 这一切在后端如何发生?如何在我的JSF 2.1应用程序中启用这种机制? 在Tomcat7服务器上使用JSF 2.1 问题答案: 这基本上是通过一个长寿的cookie完成的。JSF API不提供此功能,因为它只

  • 问题内容: 在我的应用程序中,我使用jsapi实现了Google注销。 现在,我需要在我的应用程序中单击一个按钮的同时从Google登出该用户。如何使用JavaScript实现此功能,或者至少每次用户登录时它都必须询问Google登录页面。 我已经尝试过,但是似乎没有用。 问题答案: OAuth概述:他/她说的用户是他/她吗? 我不确定您是否使用OAuth来登录Stack Overflow,例如“

  • 用户登录 在用户登录App账号时调用以下登录方法,从而保证用户是以登录身份进行咨询,是区分会话的用户的唯一标识; 游客咨询不需要调用小能login方法,小能会自动生成一个游客身份标识,在客服端游客身份的用户名显示为:“游客+4位数字”。 App完全退出(被杀掉进程), 再次进入时, 在SDK初始化之后, 如果App本身账号是登录用户, 需要重新调用小能SDK登陆接口,同步用户身份【大多是针对App

  • 登录与注销 用户登录 在App登录的地方,调用小能的login方法,目的是传递账号信息,为客服端显示用户信息。在App被杀死之后,sdk会保持用户的登录状态,不需要再次调用登录的方法。 uid作为用户的唯一标识需要保证唯一性,username可根据需要传入手机号、昵称等信息 /** * @param uid 必填,登录用户的id, 只能输入数字、英文字母和"@._—"四种字符,长度小于等于60位