【问题标题】:android - google SSO chooser - Use another account option not giving callbackandroid - 谷歌 SSO 选择器 - 使用另一个帐户选项不提供回调
【发布时间】:2018-05-10 11:57:10
【问题描述】:

以下是重现问题的步骤:

  1. 点击谷歌登录按钮。
  2. 选择“使用其他帐户”
  3. 使用新帐户登录,这应该会让您回到应用程序。
  4. 应用仅显示深色覆盖和同意表单或回调(到 onActivityResult)不起作用。

然后,如果我触摸屏幕,黑暗的覆盖就会消失,此时如果我再次按下谷歌按钮,它会自动让我使用该帐户登录。我尝试了一些应用程序,如 stackoverflow、traveloka、airBNB、我自己的带有 google SSO 按钮和 glassdoor、lazada 等的简单应用程序以及其他一些应用程序,在进入选项 3 后它们都给出了错误。

我想也许是 [oauth 同意书]:

我填写了它,但我只请求电子邮件作为谷歌 SSO 选项。所以我填写了表格,但等待一段时间后什么也没有。

如果你想看我的完整代码,它的标准谷歌单点登录按钮and its here: 该类称为 LoginFragment.kt

但让我在这里发布处理登录的类:

    import android.content.Intent
import android.os.Bundle
import android.view.*
import android.widget.Toast
import com.github.ajalt.timberkt.Timber
import com.google.android.gms.auth.api.Auth
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.GoogleSignInOptions
import com.google.android.gms.common.api.ApiException
import com.google.android.gms.common.api.GoogleApiClient
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.GoogleAuthProvider
import example.org.weathermap.R
import example.org.weathermap.frameworks.bus.events.LoginSuccessEvent
import example.org.weathermap.presentation.view.application.WeatherApplication
import example.org.weathermap.presentation.view.base.BaseMvpFragment
import example.org.weathermap.presentation.contracts.authentication.AuthenticationView.LoginView
import example.org.weathermap.presentation.presenters.weather.LoginPresenter
import kotlinx.android.synthetic.main.login_fragment.*
import org.greenrobot.eventbus.EventBus
import javax.inject.Inject


class LoginFragment : BaseMvpFragment<LoginView, LoginPresenter>(), LoginView {

    @Inject
    lateinit var mPresenter: LoginPresenter

    @Inject
    lateinit var mAuth: FirebaseAuth

    private var mGoogleApiClient: GoogleApiClient? = null

    @Inject
    lateinit var bus: EventBus

    override fun createPresenter(): LoginPresenter {
        return mPresenter
    }

    override fun onDestroyView() {
        super.onDestroyView()
        mGoogleApiClient?.let { client ->
            when (client.isConnected) {
                true -> activity?.let {
                    client.stopAutoManage(it)
                    client.disconnect()
                }
                false -> {
                }
            }
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val rootView = inflater.inflate(R.layout.login_fragment, container, false)
        (activity!!.applicationContext as WeatherApplication).appComponent.inject(this)
        setHasOptionsMenu(true)
        return rootView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initView()

    }

    override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
        super.onCreateOptionsMenu(menu, inflater)
        menu?.clear()
    }

    private fun initView() {
        // Configure Google Sign In
        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build()

        activity?.let {
            mGoogleApiClient = GoogleApiClient.Builder(it).enableAutoManage(it, { Toast.makeText(activity, "login error", Toast.LENGTH_LONG).show() })
                    ?.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    ?.build()
        }
        googleBtn.setOnClickListener { presenter.doSignIn() }
    }

    override fun signIn() {
        val signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
        startActivityForResult(signInIntent, RC_SIGN_IN)
    }

    companion object {
        const val RC_SIGN_IN = 1
        fun newInstance(b: Bundle?): LoginFragment {
            val frag = LoginFragment()
            frag.arguments = b ?: Bundle()
            return frag
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == RC_SIGN_IN) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                // Google Sign In was successful, authenticate with Firebase
                val account = task.getResult(ApiException::class.java)
                presenter.doFirebaseAuthWithGoogle(account)
            } catch (e: ApiException) {
                // Google Sign In failed, update UI appropriately
                Timber.e { "Google sign in failed" }
                Toast.makeText(activity, R.string.login_failed, Toast.LENGTH_LONG).show()
            }

        }
    }

    override fun firebaseAuthWithGoogle(acct: GoogleSignInAccount?) {
        showLoading(true)
        val credential = GoogleAuthProvider.getCredential(acct?.idToken, null)
        activity?.let {
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(it, {
                        showLoading(false)
                        when (it.isSuccessful) {
                            true -> {
                                bus.post(LoginSuccessEvent())
                            }
                            else -> {
                                Toast.makeText(activity, getString(R.string.login_failed), Toast.LENGTH_LONG).show()
                            }
                        }
                    })
        }
    }
}

我做错了什么?它是谷歌错误吗?如果可能的话,我什至会想办法在选择器上禁用此选项。

我在 api 24 上完成的测试

【问题讨论】:

    标签: android firebase google-api-client google-authentication


    【解决方案1】:

    来自 firebase ui 团队 - https://github.com/firebase/FirebaseUI-Android/issues/1297。我看到这是一个已知问题,将在下一个 google play 服务版本中修复。

    【讨论】:

      猜你喜欢
      • 2013-01-01
      • 1970-01-01
      • 2017-05-16
      • 2017-10-08
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      相关资源
      最近更新 更多