B4A Library Firebase UI Auth - a new Dimension in Authentication

DonManfred

Expert
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.

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

Mandatory:
- 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.

B4X:
CreateResourceFromFile(Macro, FirebaseUI.uibindings)
- Mandatory additional Jars needed to the B4A Code

B4X:
#Extends: android.support.v7.app.AppCompatActivity
#AdditionalJar: com.google.android.gms:play-services-auth
#AdditionalJar: com.android.support.constraint:constraint-layout
#AdditionalJar: com.android.support.constraint:constraint-layout-solver
#AdditionalJar: com.google.firebase:firebase-auth
#AdditionalJar: com.android.support:customtabs
#AdditionalJar: android.arch.lifecycle:extensions
#AdditionalJar: firebase-ui-auth.aar
#AdditionalJar: firebase-ui-common.aar
#AdditionalJar: firebase-ui-database.aar
#AdditionalJar: firebase-ui-firestore.aar
#AdditionalJar: firebase-ui-storage.aar
#AdditionalRes: ..\res.FirebaseUI
Basically you setup the allowed Auth methods with this Code:
B4X:
    Dim ib As SignInIntentBuilder
    ib.Initialize("",fbauth.createSignInIntentBuilder)
    ib.addProvider(ib.IdpEMAIL_PROVIDER)
    ib.addProvider(ib.IdpGOOGLE_PROVIDER)
    ib.addProvider(ib.IdpPHONE_VERIFICATION_PROVIDER)
    Dim intent As Intent
    intent = ib.setAllowNewEmailAccounts(True).setIsSmartLockEnabled2(False,True).setProviders(ib.Providerlist).setTosUrl("http://URLtoTOS").setPrivacyPolicyUrl("http://URLtoTOS").build
    StartActivity(intent)
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


FirebaseUI

Author: DonManfred (wrapper)
Version: 0.21
  • 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:
      • IdTokenChanged (user As FirebaseUser)
      • 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)
      • RemoveIdTokenListener (listener As com.google.firebase.auth.FirebaseAuth.IdTokenListener)
      • RemoveListener (listener As com.google.firebase.auth.FirebaseAuth.AuthStateListener)
      • SendSigninIntent (signin As android.content.Intent)
      • signInWithCustomToken (token As String)
      • signOut
      • updateEmail (newEmail As String)
      • updatePassword (newPassword As String)
    • Properties:
      • CurrentUser As FirebaseUser [read only]
  • FirebaseUser
    • Functions:
      • isAnonymous As Boolean
      • isEmailVerified As Boolean
      • IsInitialized As Boolean
    • Properties:
      • DisplayName As String [read only]
      • Email As String [read only]
      • PhotoUrl As String [read only]
      • Uid As String [read only]
  • SignInIntentBuilder
    • Functions:
      • addProvider (provider As com.firebase.ui.auth.AuthUI.IdpConfig)
      • build As android.content.Intent
      • clearProvider
      • Initialize (EventName As String, builder As com.firebase.ui.auth.AuthUI.SignInIntentBuilder)
      • IsInitialized As Boolean
      • setAllowNewEmailAccounts (enabled As Boolean) As SignInIntentBuilder
      • setAvailableProviders (providers As java.util.List) 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:
      • IdpEMAIL_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpFACEBOOK_PROVIDER As com.firebase.ui.auth.AuthUI.IdpConfig [read only]
      • IdpGOOGLE_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. It is my Christmas Present to you!

You can however donate for it if you want :)

Merry Christmas
 

Attachments

Last edited:

yiankos1

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.
 

yiankos1

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

EDIT:
If i attach this aar file from Facebook SDK:
B4X:
#AdditionalJar: facebook-core.aar
i get this error:
B4X:
** Activity (main) Resume **
onAuthStateChanged()
** 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:

DonManfred

Expert
Licensed User
Updated to V0.11

New:
- Authentification using a Custom Token generated by the FirebaseAdmin SDK (B4J Library currently in Beta)
 

yiankos1

Active Member
Licensed User
Hello,
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.

Edit:
I figured out how to set logo with this code:
B4X:
    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:
Top