不能与片段使用FirebaseUI(Can't use FirebaseUI with fr

2019-10-28 09:50发布

我试图实现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) 

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

Answer 1:

尝试添加该行代码到您的strings.xml文件

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

你可以从谷歌控制台您的Web客户端ID。 选择您的项目,然后去API和服务 > 凭据的OAuth 2.0客户端ID,你会发现一个名为Web客户端一个ID。 复制与它取代上面的代码。

如果Web客户端ID不存在,您可以点击创建凭证 >然后OAuth用户端ID选择作为下一个页面上的应用程序类型的Web应用程序 ,然后点击创建。



Answer 2:

这是为了帮助那些谁也有类似情况,像我一样(改变google-services.json这个错误开始)

TL; DR:比较旧版本到新版本,并添加web客户端ID部分(可在GCP控制台中找到)到oauth-client的新文件的部分。

我得到了同样的问题,但它是工作的罚款很长一段时间,直到最近,当我有一个新的更新我的代码google-services.json 。 我恢复到旧版本的google-services.json文件和它的工作。

于是,我住进了区别两个版本之间,他们只是略有不同。 继@ Totoo的答案,我去了我GCP控制台,并得到了我的Web客户端ID(称为“Web客户端(自动由谷歌服务创建)”),我搜索中的两个版本的ID google-services.json文件,并将其存在下的这两个文件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文件和它的工作。

我只是改变了签约SHA签名在火力地堡控制台(这是我去的第一个地方下载的文件的一个新版本的原因),所以我怀疑这是某种类型的错误在火力地堡结束与他们产生google-services.json文件,当然,我可能是错的,所以随时指正。



文章来源: Can't use FirebaseUI with fragments