针对菜鸟问题的预先道歉-我已经尝试了一段时间,现在转向Stack Overflow,以期解决这个小问题。
就我而言,似乎通过电子邮件(signInWithEmailAndPassword
)登录用户的Firebase方法似乎无效。
我当前的设置是这样
AuthFragment
,这是一个从其父活动AuthActivity
调用方法的片段。AuthActivity
,一个包含几个方法/自定义函数的活动:
validate()
,它检查电子邮件和密码输入是否有效signIn()
,它使用Firebase的signInWithEmailAndPassword
方法登录用户。以下是我的代码段:
AuthActivity.kt
package com.example.myApplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
class AuthActivity : AppCompatActivity() {
private lateinit var auth: FirebaseAuth
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_auth)
}
fun validate(email: String?, password: String?): Boolean {
return ((email != null) && (password != null)) && (password.length >= 5) && (email.contains("@"))
}
fun signIn(email: String, password: String) {
auth = Firebase.auth
Log.d("Auth", "Attempting to authenticate...")
auth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this) { task ->
Log.d("Auth", "Result supposedly received.")
if (task.isSuccessful) {
Log.d("Auth", "User authentication successful.")
Toast.makeText(this, task.result.toString(), Toast.LENGTH_LONG).show()
} else {
Log.d("Auth", "User authentication failed.")
Toast.makeText(this, "User authentication failed. Please try again.", Toast.LENGTH_LONG).show()
}
}
}
}
AuthFragment.kt
package com.example.myApplication
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
class AuthFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val root = inflater.inflate(R.layout.fragment_auth, container, false)
val emailField = root.findViewById<TextView>(R.id.auth_emailField)
val passwordField = root.findViewById<TextView>(R.id.auth_passwordField)
val signInButton = root.findViewById<Button>(R.id.auth_signInButton)
signInButton.setOnClickListener {
val authActivity = AuthActivity()
val email = emailField.text.toString()
val password = passwordField.text.toString()
val valid = authActivity.validate(email, password)
Log.d("Auth", valid.toString())
if (valid) {
authActivity.signIn(email, password)
} else {
Toast.makeText(activity, "Some fields are not properly filled. Please try again.", Toast.LENGTH_LONG).show()
}
}
return root
}
}
看看AuthActivity
中的代码,我希望在Logcat中出现以下结果之一:
"User authentication successful."
"User authentication failed."
但是,我仅在Logcat中将此作为响应:
I/BiChannelGoogleApi: [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzaq@60b999e
感谢所有帮助,谢谢!
答案 0 :(得分:0)
我在这个上损失了几个小时,所以让我分享一下我的经验。
Gms代表“ Google移动服务”,它基本上是Google开发的Android的附加API,可连接到Google提供的一系列服务。如果您使用flutter,则可能是由您使用的flutter包(例如firebase_auth,flutter_facebook_login或/和google_sign_in)包装的。
该错误有时可能是由更高级别的组件处理的,因此,如果您遇到该错误,并不表示您的配置错误或无法正常工作。就我而言,使用Google登录进行登录时,我遇到此错误并获得成功的最终结果,如下所示:
info flutter.tools W / BiChannelGoogleApi(4106):[FirebaseAuth:] getGoogleApiForMethod()返回了Gms:com.google.firebase.auth.api.internal.zzak@8116b2c 信息flutter.tools D / FirebaseAuth(4506):通知ID令牌侦听器有关用户(lCZZZZJELWhGUZZZZB3vDklZZZZ2)。 info flutter.tools D / FirebaseAuth(4506):通知有关用户的身份验证状态侦听器(lCZZZZJELWhGUZZZZB3vDklZZZZ2)。 信息flutter.tools I / flutter(4506):FirebaseUser({uid:lCZZZZJELWhGUZZZZB3vDklZZZZ2,photoUrl:https://lh5.googleusercontent.com/-ZZzir_P-ENw/AAAAAAAAAAI/AAAAAAAAAAA/PpxhiXg_ISk/s96-c/photo.jpg,isAnonymous:false,... 我有个飞镖叫print(fireUser);在我的代码中,我们看到它是成功的。
但是在Facebook Auth的情况下,我只是遇到了此事,此后什么也没发生,但是在Facebook服务器端,登录成功,因为我可以在Facebook开发者控制台中看到事件。
info flutter.tools W / BiChannelGoogleApi(4106):[FirebaseAuth:] getGoogleApiForMethod()返回了Gms:com.google.firebase.auth.api.internal.zzak@8116b2c 日志中没有其他内容,因此在此过程中有些卡住了。
我的问题是我将两个应用程序App Id和Secret混合在一起。有时候我很傻,但是问题是零警告或特定错误无处发生,因此这是Firebase和其他插件可能失败的事情的列表:
确保已在Firebase控制台中正确配置了登录提供程序(google,facebook等)。 升级所有Flutter软件包。我个人不使用软件包版本,而是使用所有flutter软件包的最新版本。我使用的是AndroidX。 对于Facebook Auth的特定情况(我发现Google登录更容易集成):
确保您看好的应用程序 确保应用程序ID和应用程序密码是正确的。在Facebook开发者控制台中,检查那里的基本设置。 确保您已添加“ Facebook登录”产品。如果您没有在左侧菜单中看到它,请在Facebook开发控制台中,检查仪表板并添加它。 在“ Facebook登录”产品设置中,确保已添加Firebase控制台为您提供的“有效OAuth重定向URI”(在Facebook登录提供程序配置中)。您可以在该页面下方的“重定向URI验证程序”工具中对其进行检查。 在应用程序的“基本设置”中,如果您使用flutter(=>移动平台),请确保您具有IOS部分/平台和Android部分/平台。要实现此目的,您可以手动“添加平台”或使用“快速入门”。 最后,“ IOS”部分只能包含“捆绑ID” 并且Android部分应包含“ Google Play包名称”,“类名称”和至少一个“密钥哈希”(用于调试)。如果您不知道如何创建哈希,请使用“ Facebook登录”快速入门。 希望对您有帮助