{"id":6714,"date":"2025-10-21T07:35:50","date_gmt":"2025-10-21T07:35:50","guid":{"rendered":"https:\/\/obsidiansofteducation.com\/?page_id=6714"},"modified":"2025-11-15T17:55:53","modified_gmt":"2025-11-15T17:55:53","slug":"mit-app-inventor-firebase-authentication-realtime-database-tutorial","status":"publish","type":"page","link":"https:\/\/obsidiansofteducation.com\/index.php\/mit-app-inventor-firebase-authentication-realtime-database-tutorial\/","title":{"rendered":"MIT App Inventor Firebase Authentication and Secure Database &#8211; Save\/Load User Specific Data"},"content":{"rendered":"\n<p class=\"has-medium-font-size\">Hello friends, and welcome to Obsidian Soft,<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Today, I will show you the real power of Firebase using their authentication with their Realtime Database. We will develop a small example of Firebase authentication using email and password, where users can add or view their own notes, but after securely logging in to the app. Firebase authentication also has Google sign up and sign in, but that process is a little complicated and lengthy, so I will cover Google sign up in a later tutorial.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">This is the demo of the app at work. I can sign up using any email account. It is so much easier to remember your emails as compared to user names, and everyone has at least one email address. So, you enter an email and provide a password. I will log in as I have already signed up with this account. And you are taken to your notes screen where only your notes are loaded. Let\u2019s go back and try signing up. I will use a different email address and password. And now a new user will be created in the system against this email and this time the notes screen doesn\u2019t have anything as I am a different user now.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">So, let\u2019s begin:<\/p>\n\n\n\n<p class=\"has-medium-font-size\">First, we need to create our project in Firebase, in which we will have authentication and a realtime database.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Open up the Firebase console: <a href=\"https:\/\/console.firebase.google.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/console.firebase.google.com\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Create a new project, e.g., NotesProject, and go with the default settings.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Click on Authentication on the left side. If you don\u2019t see it, then click on the build tab on the left side. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"428\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_T7mq6dHquH-1024x428.png\" alt=\"\" class=\"wp-image-6715\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_T7mq6dHquH-1024x428.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_T7mq6dHquH-300x126.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_T7mq6dHquH-768x321.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_T7mq6dHquH-1536x643.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_T7mq6dHquH.png 1912w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Click on Get started button. Choose email\/password. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"447\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_TBAha5CToS-1024x447.png\" alt=\"\" class=\"wp-image-6716\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_TBAha5CToS-1024x447.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_TBAha5CToS-300x131.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_TBAha5CToS-768x335.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_TBAha5CToS-1536x670.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_TBAha5CToS.png 1829w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">It will take you to another page. Enable only Email\/Password sign-in here.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"452\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_PUeRovH8ic-1024x452.png\" alt=\"\" class=\"wp-image-6717\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_PUeRovH8ic-1024x452.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_PUeRovH8ic-300x132.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_PUeRovH8ic-768x339.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_PUeRovH8ic-1536x678.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/explorer_PUeRovH8ic.png 1855w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;Now, we also need a database in this project, so click on Realtime Database on the left again under the build tab.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"438\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_m4XVS92mYc-1024x438.png\" alt=\"\" class=\"wp-image-6718\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_m4XVS92mYc-1024x438.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_m4XVS92mYc-300x128.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_m4XVS92mYc-768x328.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_m4XVS92mYc-1536x657.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_m4XVS92mYc.png 1850w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Then, click on &#8216;Create Database&#8217; button and choose the location nearest to you. For example, I chose Singapore. And then start the database in locked mode. Now, you can see the difference. For the Firebase DB component in our <a href=\"https:\/\/obsidiansofteducation.com\/index.php\/app-inventor-firebasedb-tutorial-signup-login-screen\/\">earlier tutorials<\/a>, we started in test mode, and we kept the project in that mode, which was unsafe, as anyone could see our data if they had the link. Locked mode means <em>no one<\/em> can read\/write to our database. After the database is created, you will see the reference URL to your database.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Copy it by clicking on that chain icon and paste it into Notepad or some other text editor.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"444\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_SBGdyg0PU1-1024x444.png\" alt=\"\" class=\"wp-image-6719\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_SBGdyg0PU1-1024x444.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_SBGdyg0PU1-300x130.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_SBGdyg0PU1-768x333.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_SBGdyg0PU1-1536x666.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_SBGdyg0PU1.png 1861w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, click on the rules tab. Right now, read and write are both locked. Remove the rules and paste <strong>this <\/strong>in its place:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"rules\": {\n    \"users\": {\n      \"$uid\": {\n        \".read\": \"auth != null &amp;&amp; auth.uid === $uid\",\n        \".write\": \"auth != null &amp;&amp; auth.uid === $uid\"\n      }\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size\">and don&#8217;t forget to click on the <strong>Publish <\/strong>button. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_mDeAAw9WtV-1-1024x442.png\" alt=\"\" class=\"wp-image-6721\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_mDeAAw9WtV-1-1024x442.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_mDeAAw9WtV-1-300x129.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_mDeAAw9WtV-1-768x332.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_mDeAAw9WtV-1-1536x663.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/chrome_mDeAAw9WtV-1.png 1851w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading has-medium-font-size\"><strong>\ud83d\udd0d What do these rules mean?<\/strong><\/h4>\n\n\n\n<p class=\"has-medium-font-size\">These are <strong>Firebase Realtime Database Security Rules<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Only a logged-in user <strong>(auth != null) <\/strong>can access data, and a user can see his or her own data and not anyone else\u2019s <strong>(auth.uid === $uid)<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">We also need the API key for our project. The process was easier before but recently they have changed it but no worries as I have got you covered.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Click on Project Overview on the left.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"533\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_XpGf5Deimi-1024x533.png\" alt=\"\" class=\"wp-image-6775\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_XpGf5Deimi-1024x533.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_XpGf5Deimi-300x156.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_XpGf5Deimi-768x399.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_XpGf5Deimi-1536x799.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_XpGf5Deimi.png 1644w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, click on Add App.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"517\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_WG9Y2GDXpG-1024x517.png\" alt=\"\" class=\"wp-image-6776\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_WG9Y2GDXpG-1024x517.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_WG9Y2GDXpG-300x151.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_WG9Y2GDXpG-768x388.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_WG9Y2GDXpG-1536x775.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_WG9Y2GDXpG.png 1688w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Choose Web app (the round button with<strong> &lt;\/> <\/strong>on it)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"492\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_T8idEuXC61-1024x492.png\" alt=\"\" class=\"wp-image-6777\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_T8idEuXC61-1024x492.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_T8idEuXC61-300x144.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_T8idEuXC61-768x369.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_T8idEuXC61-1536x738.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_T8idEuXC61.png 1649w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Give some name to your web app and click on Register app button.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"629\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_udhgpm89WF-1024x629.png\" alt=\"\" class=\"wp-image-6778\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_udhgpm89WF-1024x629.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_udhgpm89WF-300x184.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_udhgpm89WF-768x472.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_udhgpm89WF.png 1335w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">After a few seconds, some details will show up. Copy the apiKey. This is your Web API key.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"671\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_Z5MyyYYaoq-1024x671.png\" alt=\"\" class=\"wp-image-6779\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_Z5MyyYYaoq-1024x671.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_Z5MyyYYaoq-300x197.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_Z5MyyYYaoq-768x503.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/11\/chrome_Z5MyyYYaoq.png 1325w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Paste it where you also pasted the URL for the Firebase Realtime Database. Keep your Web API key secure.\u00a0<em>Don&#8217;t use my API key as it will not work; I have already deleted this project.<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Let\u2019s head to MIT App Inventor to make our very awesome notes in the cloud app. Unfortunately, with this project, we cannot use the built-in Firebase DB component, and we will need to post our requests to the Firebase Realtime Database using the web component but don\u2019t worry, I will go slow and explain each step and we have used the web component many times before too when connecting with different APIs.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">A simple screen here with align horizontal and align vertical properties both centered. A text box from the UserInterface palette for email. Rename to emailTxt. Make font bold, font size 18, and change hint to Enter email. Add a password textbox below. Make font bold, font size 18, and change hint to Enter password.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">A button for sign up. Rename to signupBtn. Duplicate by selecting it and pressing <strong>Ctrl + C and Ctrl + V<\/strong> on the keyboard for Windows or <strong>Command + C and Command + V<\/strong> for macOS. Rename to loginBtn and change text to \u201cLog In\u201d. Add a notifier from the User Interface palette for error messages and a web component from the Connectivity palette for talking to the Firebase.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Add another screen. Let\u2019s call it mainScreen. In screen properties, make it align horizontal and align vertical both center.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Add a textbox for entering notes. Add a button for saving. Customize them just like the previous screen.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Add a list view for showing previous notes for the user. Also, add a notifier for showing messages. We need another web component for this screen.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Also, add a clock from sensors for storing time with our notes.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Choose screen1 again and go to the blocks section.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Two global variables for containing the user\u2019s unique identifier and token. These are sent by Firebase Authentication after a successful sign-up or login, and we need to store them to access the Realtime Database securely. Also, make a global variable for your&nbsp; API key and paste your Web API key in there that you had copied into your notepad. Don\u2019t share your api key with anyone.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"462\" height=\"52\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image.png\" alt=\"\" class=\"wp-image-6724\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image.png 462w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-300x34.png 300w\" sizes=\"auto, (max-width: 462px) 100vw, 462px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"494\" height=\"52\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-2.png\" alt=\"\" class=\"wp-image-6725\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-2.png 494w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-2-300x32.png 300w\" sizes=\"auto, (max-width: 494px) 100vw, 494px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"932\" height=\"52\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-1.png\" alt=\"\" class=\"wp-image-6726\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-1.png 932w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-1-300x17.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-1-768x43.png 768w\" sizes=\"auto, (max-width: 932px) 100vw, 932px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Our sign-up and log-in procedures are almost identical except for the web URL, so it is best to make a procedure. Hence, go to the Procedures section on the left and get the first type of block. Rename to signUpLoginPost. Click on the cog wheel to add an input parameter called url.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"442\" height=\"122\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-3.png\" alt=\"\" class=\"wp-image-6727\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-3.png 442w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-3-300x83.png 300w\" sizes=\"auto, (max-width: 442px) 100vw, 442px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Here, we need to do error handling, so from Control, get an IF\/ELSE block. In IF, add a condition for checking that the email textbox <strong>OR <\/strong>the password textbox isn\u2019t empty. In the IF body, i.e., the place we will go when the IF condition is true, use the notifier to show an alert that both email and password are needed.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"216\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-4-1024x216.png\" alt=\"\" class=\"wp-image-6728\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-4-1024x216.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-4-300x63.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-4-768x162.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-4-1536x324.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-4.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">What will happen in ELSE?<\/p>\n\n\n\n<p class=\"has-medium-font-size\">We provide the input URL to the web\u2019s URL property. We set the Web\u2019s request headers to a dictionary with key: \u201cContent-Type\u201d and value: \u201capplication\/json\u201d. And then we send the user-entered data as a dictionary to the Firebase authentication system with<strong> returnSecureToken<\/strong> set to true. Please do it the same way, as the spellings of the keys are super important.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"388\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-8-1024x388.png\" alt=\"\" class=\"wp-image-6732\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-8-1024x388.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-8-300x114.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-8-768x291.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-8-1536x583.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-8.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, what are the actual URLs:<\/p>\n\n\n\n<p>They are different for both sign-up and login button click events.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">For the signup button, the URL text box should be equal to a join of two things:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><a href=\"https:\/\/identitytoolkit.googleapis.com\/v1\/accounts:signUp?key=\" target=\"_blank\" rel=\"noopener\">https:\/\/identitytoolkit.googleapis.com\/v1\/accounts:signUp?key=<\/a><\/li>\n\n\n\n<li class=\"has-medium-font-size\">Your API key that you stored in the global variable.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"178\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-7-1024x178.png\" alt=\"\" class=\"wp-image-6731\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-7-1024x178.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-7-300x52.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-7-768x133.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-7.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">For the login button,&nbsp; the URL text box should be equal to a join of two things:<\/p>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><a href=\"https:\/\/identitytoolkit.googleapis.com\/v1\/accounts:signInWithPassword?key=\" target=\"_blank\" rel=\"noopener\">https:\/\/identitytoolkit.googleapis.com\/v1\/accounts:signInWithPassword?key=<\/a><\/li>\n\n\n\n<li class=\"has-medium-font-size\">Your api key that you stored in the global variable.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"178\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-6-1024x178.png\" alt=\"\" class=\"wp-image-6729\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-6-1024x178.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-6-300x52.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-6-768x133.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-6.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">I will give them in the video description, so copyand&nbsp; paste them carefully.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">&nbsp;Both sign-up and login buttons follow the same process of posting to the Web, so both will trigger the Web\u2019s gotText event, so get that.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"954\" height=\"172\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-5.png\" alt=\"\" class=\"wp-image-6730\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-5.png 954w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-5-300x54.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-5-768x138.png 768w\" sizes=\"auto, (max-width: 954px) 100vw, 954px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Again, because of error handling, we need an IF\/ELSE block from Control. In IF, we first check that the response code is equal to 200. This is the standard web response for a successful request. If successful, we are going to decode our response content into a dictionary called responseDict.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-9-1024x275.png\" alt=\"\" class=\"wp-image-6733\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-9-1024x275.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-9-300x81.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-9-768x206.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-9-1536x413.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-9.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, we have a dictionary in the form of something like this returned by Firebase authentication:<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>{\n\n&nbsp;&nbsp;\"idToken\": \"eyJhbGciOiJSUzI1NiIsImtpZCI6IjA...\",\n\n&nbsp;&nbsp;\"email\": \"user@example.com\",\n\n&nbsp;&nbsp;\"refreshToken\": \"AEu4IL3i6K9oZg0zjB0D6VfL9g...\",\n\n&nbsp;&nbsp;\"expiresIn\": \"3600\",\n\n&nbsp;&nbsp;\"localId\": \"ZxY123abc456def789ghi012jkl\",\n\n&nbsp;&nbsp;\"kind\": \"identitytoolkit#SignupNewUserResponse\"\n\n}<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size\">We are interested in two things. The localId and the idToken (spellings and case are both important here). We are going to use Dictionary\u2019s getValue for the Key block to get these values by specifying exact keys and store them in our global variables uid and token, respectively. And we will open the second screen, passing these values in a dictionary.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"475\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-10-1024x475.png\" alt=\"\" class=\"wp-image-6734\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-10-1024x475.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-10-300x139.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-10-768x356.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-10-1536x712.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-10.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Our else is for error handling, considering different situations.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">So the final Web.GotText looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"952\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-11-1024x952.png\" alt=\"\" class=\"wp-image-6735\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-11-1024x952.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-11-300x279.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-11-768x714.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-11-1536x1428.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-11.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Our screen 1 is done and we have sent the data to the second screen.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">So let\u2019s work on the blocks on our second screen.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">First, we make a global variable for our notesList.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"740\" height=\"54\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-12.png\" alt=\"\" class=\"wp-image-6736\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-12.png 740w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-12-300x22.png 300w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Then, we make global variables for uid and token and set them to the data sent as a dictionary from the first screen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"852\" height=\"156\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-13.png\" alt=\"\" class=\"wp-image-6737\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-13.png 852w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-13-300x55.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-13-768x141.png 768w\" sizes=\"auto, (max-width: 852px) 100vw, 852px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"884\" height=\"156\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-14.png\" alt=\"\" class=\"wp-image-6738\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-14.png 884w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-14-300x53.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-14-768x136.png 768w\" sizes=\"auto, (max-width: 884px) 100vw, 884px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, in the second screen\u2019s initialize event, we need to load and show the already saved notes, if any.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"377\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-15-1024x377.png\" alt=\"\" class=\"wp-image-6739\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-15-1024x377.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-15-300x111.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-15-768x283.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-15.png 1064w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">The URL here is made up of a join of <strong>5 things<\/strong>, and each piece is super important.&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">The URL of your real-time database that you had copied and pasted in Notepad earlier.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">users\/<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Global variable uid<\/li>\n\n\n\n<li class=\"has-medium-font-size\">\/notes.json?auth=<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Global variable token<\/li>\n<\/ol>\n\n\n\n<p class=\"has-medium-font-size\">Make sure that there are no typing mistakes in parts 1,2, and 3.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">The web1.get will trigger the gotText event, but before working on that, let\u2019s work on our saveBtn code. We check that the note&#8217;s text isn\u2019t empty, and then we set exactly the same URL as we used in the screen\u2019s initialize event, so duplicate from there.<\/p>\n\n\n\n<p class=\"has-medium-font-size\">Then we make a dictionary of two things: clock.now and notesTxt.text against their respective keys of \u201ctime\u201d and \u201cnote\u201d. And we post this as text to the Web. In the else, we show an alert that enter a value for the note.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"404\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-16-1024x404.png\" alt=\"\" class=\"wp-image-6740\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-16-1024x404.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-16-300x118.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-16-768x303.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-16-1536x606.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-16.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">The postText also triggers the Web\u2019s gotText event, so now, let\u2019s finally work on our final event, i.e., the Web\u2019s gotText event. First, we check that we got a successful response from the server. If not, we show the error using the notifier\u2019s show alert block.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"415\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-17-1024x415.png\" alt=\"\" class=\"wp-image-6741\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-17-1024x415.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-17-300x122.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-17-768x312.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-17.png 1124w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Now, remember that a successful response could be because of two things. Either we loaded data successfully or we saved a new note successfully. How to differentiate?<\/p>\n\n\n\n<p class=\"has-medium-font-size\">If responseContent isn\u2019t null and it doesn\u2019t contain the word \u201c<strong>name<\/strong>\u201d, then this means that this was a successful load. In the other case, this was a successful save, so we reload the data by calling Web1. Get. No need to set web1.url again as it was set already earlier.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"357\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-18-1024x357.png\" alt=\"\" class=\"wp-image-6742\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-18-1024x357.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-18-300x105.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-18-768x268.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-18-1536x536.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-18.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Read the italicized sentences if you want to know more about using \u201cname\u201d.<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong><em>Why the word &#8220;name&#8221; for differentiating between save and load?<\/em><\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><em>In case of a successful save, the Firebase Database generates a unique ID for your data, and it sends it back as JSON in the form of a key-value pair, where the key is \u201cname\u201d, so we can assume that if our response content contains \u201cname\u201d, it means a successful save.<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><em>{<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><em>&nbsp;&nbsp;&#8220;name&#8221;: &#8220;-NxR3C78YZkX5a9Qxyz&#8221;<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><em>}<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><em>And if it doesn\u2019t, then it is a successful load.<\/em><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Once we know it was a successful load, we set our notesList to an empty list. We decode the response content in a local responseDict variable.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"452\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-19-1024x452.png\" alt=\"\" class=\"wp-image-6743\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-19-1024x452.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-19-300x133.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-19-768x339.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-19-1536x679.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-19.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Following is a snapshot of my current state of Realtime Database:<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"387\" src=\"blob:https:\/\/obsidiansofteducation.com\/e6fa168f-279c-47c9-bcdb-79e92d348744\"><\/p>\n\n\n\n<p class=\"has-medium-font-size\">We had sent a dictionary of note and time, and it was saved against a unique key generated by Firebase.&nbsp;<\/p>\n\n\n\n<p class=\"has-medium-font-size\">We can get all these \u201cnote dictionaries\u201d by using a for each key with value block from Control to go through our responseDictionary. Here each value is a \u201cnote dictionary\u201d with two key value pairs. We get these values and join them with a \u201c &#8211; \u201c in between to make a display string or text and we add it to our notes list.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"466\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-20-1024x466.png\" alt=\"\" class=\"wp-image-6744\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-20-1024x466.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-20-300x136.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-20-768x349.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-20.png 1108w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">Once the for loop is finished, we need to give our notes list as elements to our listview.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"924\" height=\"452\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-21.png\" alt=\"\" class=\"wp-image-6745\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-21.png 924w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-21-300x147.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-21-768x376.png 768w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">So, our final gotText looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"716\" src=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-22-1024x716.png\" alt=\"\" class=\"wp-image-6746\" srcset=\"https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-22-1024x716.png 1024w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-22-300x210.png 300w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-22-768x537.png 768w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-22-1536x1074.png 1536w, https:\/\/obsidiansofteducation.com\/wp-content\/uploads\/2025\/10\/image-22.png 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\">And this is done. I hope you liked this tutorial. You can check out my video tutorial for this project split into two videos:<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Part 1:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<p class=\"responsive-video-wrap clr\"><iframe loading=\"lazy\" title=\"MIT App Inventor Firebase Authentication | Secure Login + Database Setup #signuplogin\" width=\"1200\" height=\"675\" src=\"https:\/\/www.youtube.com\/embed\/GiOhBiJ-4x0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<\/div><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Part 2:<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"https:\/\/youtu.be\/Bygz1XA3HQk\" target=\"_blank\" rel=\"noopener\">https:\/\/youtu.be\/Bygz1XA3HQk<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Please like my tutorials and share it with your friends and family. Also, subscribe to my channel and press the bell icon so you don\u2019t miss any of the great projects I have planned for you.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><a href=\"https:\/\/www.youtube.com\/c\/obsidiansofteducation\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/c\/obsidiansofteducation<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\">Please like my Facebook page and Instagram page for more educational resources and tips.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Facebook:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.facebook.com\/ObsidianSoft\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Instagram:<\/strong><a href=\"https:\/\/www.blogger.com\/blog\/page\/edit\/4947000819484484884\/7140650632339107612#\" target=\"_blank\" rel=\"noopener\">&nbsp;https:\/\/www.instagram.com\/obsidiansoftapps\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Pinterest:<\/strong>&nbsp;<a href=\"https:\/\/www.pinterest.com\/obsidiansoft\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.pinterest.com\/obsidiansoft\/<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\">For links to free educational&nbsp;<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/flappy-bird-game-mit-app-inventor\/#\">&nbsp;apps<\/a>, have a look at the&nbsp;<a href=\"https:\/\/obsidiansofteducation.com\/index.php\/mobile-apps\/\">educational apps page<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello friends, and welcome to Obsidian Soft, Today, I will show you the real power of Firebase using their authentication with their Realtime Database. We will develop a small example of Firebase authentication using email and password, where users can add or view their own notes, but after securely logging in to the app. Firebase [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6714","page","type-page","status-publish","hentry","entry"],"_links":{"self":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/comments?post=6714"}],"version-history":[{"count":5,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6714\/revisions"}],"predecessor-version":[{"id":6781,"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/pages\/6714\/revisions\/6781"}],"wp:attachment":[{"href":"https:\/\/obsidiansofteducation.com\/index.php\/wp-json\/wp\/v2\/media?parent=6714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}