无法将 FirebaseUI 与片段一起使用



我正在尝试在我的应用中实现FirebaseAuth UI,但我遇到了一些问题。

我正在尝试将FirebaseUIActivity.kt创建为片段,但是当我调用支持片段管理器时,它崩溃了。

supportFragmentManager.beginTransaction().replace(R.id.fragment_container, FirebaseUIActivity.newInstance()).commit()

下面是一些代码:

MainActivity.kt

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) 

提前感谢您的帮助,埃梅克!

尝试将此代码行添加到字符串.xml文件中

<string name="default_web_client_id" translatable="false">webClientId.apps.googleusercontent.com</string>

您可以从 Google 控制台获取您的网络客户端 ID。选择您的项目,然后转到API 和服务>凭据,在OAuth 2.0客户端 ID 下,您将找到一个名为Web 客户端的 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文件,当然,我可能是错的,所以请随时纠正我。

相关内容

  • 没有找到相关文章

最新更新