尚未解析的对getSignInResultFromIntent的引用

时间:2018-11-22 20:41:14

标签: android android-studio kotlin google-authentication

您好,我是Android Studio的新手,我在网上找不到任何东西可以解决此参考问题。我遵循在线教程,使用Kotlin在我的App上通过Firebase创建Google登录。我觉得这是一个简单的修复程序,但是我还没有找到任何可以解决此错误的方法。

该项目仍可以运行该应用程序,但不能与我的缩进UI一起正常使用。

下面的代码截图和截图。

import android.content.Intent
import android.content.res.Configuration
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.app.AlertDialog
import android.util.Log
import android.widget.Toast
import com.google.android.gms.auth.api.Auth
import com.google.android.gms.auth.api.signin.GoogleSignInAccount
import com.google.android.gms.common.api.GoogleApiClient
import com.google.firebase.auth.FirebaseAuth
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.auth.api.signin.GoogleSignInResult
import com.google.android.gms.common.ConnectionResult
import com.google.firebase.auth.AuthCredential
import com.google.firebase.auth.GoogleAuthCredential
import com.google.firebase.auth.GoogleAuthProvider
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener {
override fun onConnectionFailed(p0: ConnectionResult) {
    Toast.makeText(this,""+p0.errorMessage,Toast.LENGTH_SHORT).show() //To change body of created functions use File | Settings | File Templates.
}


companion object {
    private val PERMISSION_CODE =9999
}

lateinit var mGoogleApiClient:GoogleApiClient
lateinit var firebaseAuth:FirebaseAuth
//lateinit var alertDialog:AlertDialog

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if(requestCode == PERMISSION_CODE) {
        val result:GoogleSignInResult = Auth.GOOGLE_SIGN_IN_API.getSignInResultFromIntent(data) //Error here---  
        if(result.isSuccess) {
            val account:GoogleSignInAccount? = result.signInAccount
            val idToken:String? = account!!.idToken

            val credential = GoogleAuthProvider.getCredential(idToken,null)
            firebaseAuthWithGoogle(credential)
        }
        else{
            Log.d("EDMT_ERROR","Login Unsuccessful")
            Toast.makeText(this,"Login Unsuccessful",Toast.LENGTH_SHORT).show()
        }
    }
}

private fun firebaseAuthWithGoogle(credential: AuthCredential) { // changed from AuthCredential?
    firebaseAuth!!.signInWithCredential(credential)
        .addOnSuccessListener { authResult ->
            val logged_email = authResult.user.email
            val logged_activity = Intent(this@MainActivity,LoggedActivity::class.java)
            logged_activity.putExtra("email",logged_email)
            startActivity(logged_activity)
        }
        .addOnFailureListener{
            e-> Toast.makeText(this,""+e.message,Toast.LENGTH_SHORT).show()
        }
}


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

    configureGoogleClient()

    firebaseAuth = FirebaseAuth.getInstance()

    /*alertDialog = SpotsDialog.Builder(0) //Github thing that i may have to fix
        .setContext(this)
        .setMessage("Please wait")
        .setCancelable(false)
        .build()   */

    btn_sign_in.setOnClickListener {
        signIn()
    }
}

private fun signIn() {
    val Intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient) //maybe add Intent:Intent!
    startActivityForResult(intent, PERMISSION_CODE)
}

private fun configureGoogleClient() {
    val options = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) // maybe change to options:GoogleSignInOptions! =
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail()
        .build()
    mGoogleApiClient = GoogleApiClient.Builder(this)
        .enableAutoManage(this,this)
        .addApi(Auth.GOOGLE_SIGN_IN_API,options)
        .build()
    mGoogleApiClient.connect()  // don't forget it
}

}

`

Problem here

Link to screenshot of Code

1 个答案:

答案 0 :(得分:0)

您只需要在出现错误的行上用GOOGLE_SIGN_IN_API替换GoogleSignInApi。确保您阅读API文档,例如:here