Не могу использовать FirebaseUI с фрагментами - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь внедрить пользовательский интерфейс FirebaseAuth в мое приложение, но я столкнулся с некоторыми проблемами.

Я пытаюсь создать 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) 

Спасибо за вашу помощь, Эмек!

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Попробуйте добавить эту строку кода в файл strings.xml

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

Вы можете получить свой идентификатор WEB-КЛИЕНТА в консоли Google.Выберите свой проект, затем перейдите к API & Services > Учетные данные и в разделе Идентификаторы клиента OAuth 2.0 вы найдете идентификатор с именем Веб-клиент .Скопируйте и замените приведенный выше код.

Если идентификатор веб-клиента не существует, вы можете нажать Создать учетные данные > Идентификатор клиента OAuth , а затем выбрать Веб-приложение в качестве приложениявведите на следующей странице и нажмите кнопку создать.

0 голосов
/ 09 апреля 2019

Это для того, чтобы помочь тем, у кого похожая ситуация, как у меня (изменение google-services.json и эта ошибка началась)

TL; DR: сравните вашу старую версию с новой версией и добавьте часть идентификатора веб-клиента (находится в консоли GCP) в раздел oauth-client нового файла.

У меня возникла та же проблема, но она долго работала нормально, пока недавно я не обновил свой код новым google-services.json. Я вернулся к более старой версии файла google-services.json, и это сработало.

Так что я проверил разницу между двумя версиями, они только немного отличались. После ответа @ Totoo я подошел к своей консоли GCP и получил свой идентификатор веб-клиента (называемый «Веб-клиент (автоматически создается службой Google)»), я искал идентификатор в обеих версиях файла 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-подписи в консоли Firebase (по этой причине я сначала скачал и скачал новую версию файла), поэтому я подозреваю, что это какая-то ошибка в конце Firebase с их генерацией файл google-services.json, конечно, я могу ошибаться, так что не стесняйтесь поправлять меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...