繁体   English   中英

Android Facebook 登录。 防止按钮更改为“注销”

[英]Android Facebook Login. Prevent button from changing to "log out"

让我描述一下我尝试使用 Kotlin 在 Android Studio 上做的应用程序。

初始屏幕 => 登录屏幕 => 主应用程序

Splash Screen: Just a photo Login Screen: Provides different ways of logging (Google, Facebook, etc) MainActivity:允许您注销,在这种情况下,您必须返回“登录屏幕”

到目前为止,我一直只使用 Facebook 登录。 我设法放置了按钮,使其工作,并获得了正确的 uid。 问题在于,单击该按钮时,它会自动切换到“注销”。 所以,当我 go 从我的 MainActivity 返回到我的登录屏幕时,我没有再次登录的按钮,而是有一个“注销”按钮,当帐户实际上已经注销时。

有没有办法防止这个按钮改变? 我一直在阅读大量文档,但没有发现任何有用的东西。 我的想法不正确吗? 或者有更好的方法吗? 请注意,每次离开登录屏幕时,我都会放置一个 finish()。 这样做的原因是试图重置活动,并使其像程序从头开始运行一样工作。

LoginScreen 上定义的变量

    private var mCallBackManager : CallbackManager?= null
    private var mFirebaseAuth : FirebaseAuth?= null

在创建 function

override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.lay_login_screen)

        //-----------Inicializadores-Facebook---------------
        mFirebaseAuth = FirebaseAuth.getInstance()
        FacebookSdk.sdkInitialize(getApplicationContext())
        mCallBackManager = CallbackManager.Factory.create()
        //--------------------------------------------------


        //-----------Boton-Facebook-------------------------
        Button_LoginScreen_LoginFace.setOnClickListener()
        {
            iniciarSesionFacebook();
        }
        //--------------------------------------------------

    }
private fun iniciarSesionFacebook()
    {
        Button_LoginScreen_LoginFace.registerCallback(mCallBackManager, object : FacebookCallback<LoginResult>
        {

            override fun onSuccess(result: LoginResult?)
            {
                d(getString(R.string.TAG_FacebookLogin),"Login Correct")
                handleFacebookToken(result!!.accessToken)
            }

            override fun onCancel()
            {
                d(getString(R.string.TAG_FacebookLogin),"Login cancelled")
            }

            override fun onError(error: FacebookException?)
            {
                d(getString(R.string.TAG_FacebookLogin),"Login Error")
            }
        })
    }
    private fun handleFacebookToken(accessToken: AccessToken?)
    {
        val credential = FacebookAuthProvider.getCredential(accessToken!!.token)

        mFirebaseAuth!!.signInWithCredential(credential).addOnFailureListener()
        {error->
            d(getString(R.string.TAG_FacebookLogin),"Error 1"+error.message)
        }
            .addOnSuccessListener { resultado->

                startActivity(Intent(this, MainActivity::class.java))
                finish()
            }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
    {
        super.onActivityResult(requestCode, resultCode, data)
        mCallBackManager!!.onActivityResult(requestCode,resultCode,data)
    }

最后,这就是我从 MainActivity“注销”并返回到 LoginScreen 的方式

class MainActivity : AppCompatActivity()
{

    //----------Variables-Globales----------------
    private var mFirebaseAuth : FirebaseAuth?= null
    //--------------------------------------------

    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //-------Inicializo-Variables------------------------
        mFirebaseAuth = FirebaseAuth.getInstance()
        //---------------------------------------------------

        Button_MainActity_LogOf.setOnClickListener{
            val firebaseaux=mFirebaseAuth
            firebaseaux?.signOut()
            startActivity(Intent(this, ActivityLoginScreen::class.java))

        }
    }
}

这是 LoginScreen 第一次运行时的样子。

在此处输入图像描述

这是手动登录后的样子。 请注意,不仅是代码的外观,代码本身也会发生变化。 现在该按钮不允许您登录。

在此处输入图像描述

只是为了添加一些额外的信息,我在文档中找到了这个属性

配置: auto_logout_link

HTML5 属性: data-auto-logout-link

说明:如果激活,如果用户已经登录,则该按钮将被注销按钮取代

选项:真、假

这正是我要找的。 但是,据我所知,这只是针对网页的说明,而不是 android。有人知道如何在 android 中触摸此配置吗? 或等效的机器人选项? 我将添加我找到该属性的链接。 https://developers.facebook.com/docs/facebook-login/web/login-button/

提前致谢

好的,一段时间后我设法解决了这个问题。 我从 Firebase 身份验证注销,但不是从 Facebook 身份验证注销。 我没有设法阻止按钮的行为,但至少现在的行为是正确的。 我将分享我的新注销代码。

        Button_MainActity_LogOf.setOnClickListener{
        FirebaseAuth.getInstance().signOut()  //Log out from Firebase
        if(isFacebookLogin())   //Check if logged in on facebook
        {
            LoginManager.getInstance().logOut()  //Log out from facebook
        }
          //Here i should log out from other providers

        startActivity(Intent(this, ActivityLoginScreen::class.java))
    }

private fun isFacebookLogin(): Boolean
{
    return AccessToken.getCurrentAccessToken() !=null
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM