B4A Library Firebase UI Auth - a new Dimension in Authentication


Licensed User
This is a Wrap for the Firebase UI-bindings found at Github.

It offers Authentification using
- Google-Account (Tested)
- email and password authentification (Tested)
- Telephone-Authentification (Tested)
- Twitter (Not tested as i do not have a Twitter-Dev Account)
- Facebook (Not tested as i do not have a Facebookr-Dev Account)
- Authentification using a Custom Token generated by the FirebaseAdmin SDK (B4J Library currently in Beta)

For the last two (Twitter and Facebook) there must be made additional changes to the Manifest.

- B4A 7.8+
- Manifestchanges needed!
- You app needs to be AppCompat enabled (must use AppCompat)

- Prepare your app to use Firebase. https://www.b4x.com/android/forum/threads/integrating-firebase-services.67692/#content
- Google Play Services Base - Snippet
- Firebase Base - Snippet
- Firebase Auth - Snippet
- Additional Manifestentries for the firebase-UI bindings

Add this line to your Manifest to define the needed Firebase UI Activities.

CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)
CreateResourceFromFile(Macro, FirebaseAnalytics.Firebase)
CreateResourceFromFile(Macro, FirebaseUI.uibindings)
- Mandatory additional Jars needed to the B4A Code

#AdditionalJar: androidx.legacy:legacy-support-core-utils
#AdditionalJar: androidx.annotation:annotation
#AdditionalJar: androidx.core:core
#AdditionalJar: androidx.appcompat:appcompat
#AdditionalJar: androidx.legacy:legacy-support-v4
#AdditionalJar: android.arch.lifecycle:extensions
#AdditionalJar: androidx.browser:browser
#AdditionalJar: androidx.cardview:cardview
#AdditionalJar: androidx.constraintlayout:constraintlayout
#AdditionalJar: com.google.android.material:material
#AdditionalJar: com.google.android.gms:play-services-auth
#AdditionalJar: com.google.firebase:firebase-core
#AdditionalJar: com.google.firebase:firebase-auth
#AdditionalJar: firebase-ui-auth-6.2.0.aar
#AdditionalJar: materialprogressbar-1.6.1.aar

#AdditionalRes: ..\res.FirebaseUI, com.firebase.ui.auth
Basically you setup the allowed Auth methods with this Code:
    Dim ib As SignInIntentBuilder

    Dim intent As Intent
    intent = ib.setIsSmartLockEnabled2(False,True).setAvailableProviders(ib.Providerlist).setTosUrl("http://URLtoTOS").setPrivacyPolicyUrl("http://URLtoTOS").build
- To use Google Authentification with this lib you need to provide the default_web_client id.

You can find the Value in the google-services.json

1. Open the google-services.json with Notepad++
2. Search for your apps packagename, you´ll find a snippet like this
"client_info": {
"mobilesdk_app_id": "1:888939569991:android:83f82a2b632ab8bf",
"android_client_info": {
"package_name": "de.donmanfred.fbui"
"oauth_client": [
"client_id": "dddd-ffff.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "de.donmanfred.fbui",
"certificate_hash": "hhhh"
"client_id": "xxxx-yyyy.apps.googleusercontent.com",
"client_type": 3
3. We are interested in the value of client_id from which client_type is 3.
4. Copy the value and use it in the getIdpGOOGLE_PROVIDER call above.

It will result in a Auth-Selection

WhatsApp Image 2017-12-23 at 08.39.48.jpeg

Using email
WhatsApp Image 2017-12-23 at 08.43.59.jpeg

Using new email:
WhatsApp Image 2017-12-23 at 08.45.26.jpeg


Author: DonManfred (wrapper)
Version: 0.6
  • FirebaseOptions
    • Functions:
      • Initialize (apiKey As String, appID As String, dbUrl As String, GcmsenderID As String, bucketID As String) As com.google.firebase.FirebaseOptions
  • FirebaseUI
    • Events:
      • AccessTokenAvailable (success As Boolean, token As String)
      • IdTokenChanged (user As FirebaseUser)
      • ResetPassword (success As Boolean)
      • SignedIn (user As FirebaseUser)
      • SignedOut()
      • TokenAvailable (user As FirebaseUser, success As Boolean, token As String)
      • UpdateEmail (success As Boolean, email As String)
      • UpdatePassword (success As Boolean, password As String)
      • UpdateProfile (success As Boolean, request As Object)
    • Functions:
      • AddIdTokenListener (listener As com.google.firebase.auth.FirebaseAuth.IdTokenListener)
      • AddListener (listener As com.google.firebase.auth.FirebaseAuth.AuthStateListener)
      • CreateIdTokenListener As com.google.firebase.auth.FirebaseAuth.IdTokenListener
      • CreateListener As com.google.firebase.auth.FirebaseAuth.AuthStateListener
      • createSignInIntentBuilder As com.firebase.ui.auth.AuthUI.SignInIntentBuilder
      • Initialize (EventName As String, defaultClient As String)
      • RemoveIdTokenListener (listener As com.google.firebase.auth.FirebaseAuth.IdTokenListener)
      • RemoveListener (listener As com.google.firebase.auth.FirebaseAuth.AuthStateListener)
      • sendPasswordResetEmail (email As String)
      • SendSigninIntent (signin As Intent)
      • signInWithCustomToken (token As String)
      • signOut
      • updateEmail (newEmail As String)
      • updatePassword (newPassword As String)
    • Properties:
      • CurrentUser As FirebaseUser [read only]
      • LanguageCode As String [write only]
  • FirebaseUser
    • Functions:
      • isAnonymous As Boolean
      • IsInitialized As Boolean
      • sendEmailVerification
    • Properties:
      • DisplayName As String [read only]
      • Email As String [read only]
      • PhoneNumber As String [read only]
      • PhotoUrl As String [read only]
      • Uid As String [read only]
  • GoogleBuilder
    • Functions:
      • BARef As GoogleBuilder
      • build As com.firebase.ui.auth.AuthUI.IdpConfig
      • DefaultWebClient (client As String) As GoogleBuilder
      • setScopes (scopes As java.util.List) As GoogleBuilder
        Set the scopes that your app will request when using Google sign-in. See all <a
        scopes: additional scopes to be requested
      • setSignInOptions (options As com.google.android.gms.auth.api.signin.GoogleSignInOptions) As GoogleBuilder
        Set the {@link GoogleSignInOptions} to be used for Google sign-in. Standard
        options like requesting the user's email will automatically be added.
        options: sign-in options
    • Properties:
      • Params As android.os.Bundle [read only]
      • ProviderId As String [write only]
  • SignInIntentBuilder
    • Functions:
      • addProvider (provider As com.firebase.ui.auth.AuthUI.IdpConfig)
      • build As Intent
      • clearProvider
      • getIdpGOOGLE_PROVIDER (client As String) As com.firebase.ui.auth.AuthUI.IdpConfig

        Return type: @return:config
      • GetIdpGOOGLE_PROVIDER2 (client As String, scopes As String()) As com.firebase.ui.auth.AuthUI.IdpConfig
      • GetIdpGOOGLE_PROVIDER3 (client As String) As com.firebase.ui.auth.AuthUI.IdpConfig
      • getResourceId (type As String, resourceName As String) As Int
      • Initialize (EventName As String, builder As com.firebase.ui.auth.AuthUI.SignInIntentBuilder)
      • IsInitialized As Boolean
      • setAlwaysShowSignInMethodScreen (alwaysShow As Boolean) As SignInIntentBuilder
      • setAvailableProviders (providers As java.util.List) As SignInIntentBuilder
      • setEmailLink (emailLink As String) As SignInIntentBuilder
      • setIsSmartLockEnabled (enabled As Boolean) As SignInIntentBuilder
      • setIsSmartLockEnabled2 (enableCredentials As Boolean, enableHints As Boolean) As SignInIntentBuilder
      • setLogo (logo As Int) As SignInIntentBuilder
      • setPrivacyPolicyUrl (privacyPolicyUrl As String) As SignInIntentBuilder
      • setTheme (theme As Int) As SignInIntentBuilder
      • setTosUrl (tosUrl As String) As SignInIntentBuilder
    • Properties:
      • IdpANONYMOUS_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpEMAIL_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpFACEBOOK_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpGITHUB_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpPHONE_VERIFICATION_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpTWITTER_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • Providerlist As java.util.List [read only]

The Library is free to use. You can however donate for it if you want :)

Note to download the additional JARs and AARs from here:



Last edited:


Active Member
Licensed User
I dont understand the question.
I tried to download all threee files from post #1 and it works fine here.

What exactly is the issue?
Thank you for quick reply. I downloaded all three zips. At the second zip(with aar) there is no lib (.jar & xml file) in order to copy at libs folder. I just copied only .aar files but at running throws that i am missing a library.


Active Member
Licensed User
at the end i should thank as you pointed out that the Library itself was missing :)
So, even 17 likes at first post, i am the first one testing it! :p


Active Member
Licensed User
Library working like a charm!!!
For the last two (Twitter and Facebook) there must be made additional changes to the Manifest.
I have already done the necessary work for facebook login configuration with direction of your previous firebase facebook login

If i attach this aar file from Facebook SDK:
#AdditionalJar: facebook-core.aar
i get this error:
** Activity (main) Resume **
** Service (newinst2) Start **
---- AppUpdating.newinst2: service_started
** Service (newinst2) Start **
---- AppUpdating.newinst2: service_started
** Activity (main) Pause, UserClosed = false **
java.lang.NoClassDefFoundError: com.firebase.ui.auth.provider.FacebookProvider
    at com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity.populateIdpList(AuthMethodPickerActivity.java:107)
    at com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity.onCreate(AuthMethodPickerActivity.java:81)
    at android.app.Activity.performCreate(Activity.java:6289)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
    at android.app.ActivityThread.access$900(ActivityThread.java:177)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:5942)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
Last edited:


Active Member
Licensed User
If i want to edit layout of this intent, which file should i edit?
Moreover, setLogo (logo As Int) As SignInIntentBuilder and setTheme (theme As Int) As SignInIntentBuilder what will be integers?
Thank you for your time.

I figured out how to set logo with this code:
    Dim r As Reflector
    Dim package As String
    Dim id As Int
    package = r.GetStaticField("anywheresoftware.b4a.BA", "packageName")
    id = r.GetStaticField(package & ".R$drawable", "icon")
icon is the default .png inside this folder ..\FirebaseUI\Objects\res\drawable
Last edited: