无法将FirebaseUI与片段一起使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将FirebaseUI与片段一起使用相关的知识,希望对你有一定的参考价值。
我正在尝试将FirebaseAuth UI应用到我的应用中,但我遇到了一些问题。
我正在尝试将FirebaseUIActivity.kt创建为片段,但是当我调用支持片段管理器时它会崩溃。
supportFragmentManager.beginTransaction().replace(R.id.fragment_container, FirebaseUIActivity.newInstance()).commit()
这是一些代码:
我激活了。
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// Support toolbar
setSupportActionBar(binding.toolbar)
supportFragmentManager.beginTransaction().replace(R.id.fragment_container, FirebaseUIActivity.newInstance()).commit()
}
}
FirebaseUiActivity.kt
class FirebaseUIActivity : Fragment() {
// Choose authentication providers
companion object {
fun newInstance() = FirebaseUIActivity()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding: FirebaseUiFragmentBinding = DataBindingUtil.inflate(inflater, R.layout.firebase_ui_fragment, container, false)
return binding.root
}
override fun onResume() {
super.onResume()
}
private val providers = arrayListOf(
AuthUI.IdpConfig.EmailBuilder().build(),
AuthUI.IdpConfig.GoogleBuilder().build()
)
override fun startActivityForResult(intent: Intent?, requestCode: Int) {
super.startActivityForResult(intent, requestCode)
AuthUI.getInstance().createSignInIntentBuilder()
.setAvailableProviders(providers)
.build()
}
}
错误:
Caused by: java.lang.IllegalStateException: Check your google-services plugin configuration, the default_web_client_id string wasn't populated.
at com.firebase.ui.auth.util.Preconditions.checkConfigured(Preconditions.java:90)
at com.firebase.ui.auth.AuthUI$IdpConfig$GoogleBuilder.<init>(AuthUI.java:957)
at com.example.katzinbetihot.Firebase.FirebaseUIActivity.<init>(FirebaseUIActivity.kt:40)
at com.example.katzinbetihot.Firebase.FirebaseUIActivity$Companion.newInstance(FirebaseUIActivity.kt:21)
at com.example.katzinbetihot.main.MainActivity.onCreate(MainActivity.kt:24)
at android.app.Activity.performCreate(Activity.java:7149)
at android.app.Activity.performCreate(Activity.java:7140)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1288)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3031)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3191)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1920)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6912)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
感谢你的帮助,Emek!
尝试将此代码行添加到strings.xml文件中
<string name="default_web_client_id" translatable="false">webClientId.apps.googleusercontent.com</string>
您可以从Google控制台获取WEB客户端ID。选择您的项目,然后转到API和服务>凭据,在OAuth 2.0客户端ID下,您将找到名为Web Client的ID。用它复制并替换上面的代码。
如果Web客户端ID不存在,则可以单击“创建凭据”>“OAuth客户端ID”,然后在下一页上选择“Web应用程序”作为应用程序类型,然后单击“创建”。
这是为了帮助那些有类似情况的人(更改google-services.json
并启动此错误)
TL; DR:将旧版本与新版本进行比较,并将Web客户端ID部分(可在GCP控制台中找到)添加到新文件的oauth-client
部分。
我遇到了同样的问题,但是直到最近我用新的google-services.json
更新我的代码时,它工作了很长时间。我恢复到旧版本的google-services.json
文件,它的工作原理。
所以我检查了两个版本之间的区别,它们只是略有不同。按照@ Totoo的回答,我进入了我的GCP控制台并获得了我的Web客户端ID(称为“Web客户端(由Google服务自动创建)”),我在两个版本的google-services.json
文件中搜索了ID,并且它存在于两个文件中在services/appinvite_service/other_platform_oauth_client
部分下,但只存在于文件的旧(工作)版本的oauth_client
部分下。那部分看起来像这样:
"oauth_client": [
...,
{
"client_id": "CLIENT_ID (ends with apps.googleusercontent.com)",
"client_type": 3
}
]
所以,我将这部分添加到google-services.json
文件的新版本中并且它有效。
我只更改了Firebase控制台中的签名SHA签名(这是我去的第一个位置并下载了该文件的新版本的原因),所以我怀疑这是Firebase的一些错误,他们生成了google-services.json
文件当然,我可能是错的,所以请随意纠正我。
以上是关于无法将FirebaseUI与片段一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Android:将 savedInstanceState 与片段一起使用
将 FirebaseUI 与 Twitter 登录一起使用(iOS 应用)
将 GraphQL 片段与 Apollo Hooks 一起使用时出错