We are excited to announce one of our largest releases to date – 2 new components, a ton of new advanced properties for our visible components and a host of platform updates. All new features for iOS are also available for those of us in our ✕ beta.
Please make sure that you download the latest companion apps for iOS and Android ✕.
New components
Sign In powered by Firebase - our first ever authentication component, enables easy set up for email sign-in
Media Database powered by Cloudinary - support for image, audio and video upload which returns a url
Component updates
Most Visible components (Screen, TextInput, Label, Column, Row, Image, ListViewer, WebViewer, Maps, Google Maps) - a ton of advanced properties (many not yet documented) have been added including padding, margin, border & user location (Maps / Google Maps)
Realtime DB powered by Firebase - simplified set-up for those using their own private account; pairs well with Sign In
Platform updates
(✕ beta only) Installing an Android .apk no longer requires uninstalling the Thunkable companion app
Easier discoverability of uploading files (now in the bottom left under the component tree)
Error message when dropping a Navigator or Screen to the Phone previewer; they can only be added to the Visible components section of the tree
Small updates to sharing by link and notifications during download and publish
@ts02 good point, the Firebase settings will be easier to find someday, we just ran out of time before this release
The good news for your second question is that various levels of Firebase database security are already possible, please try my admittedly ugly example app out to see user level security in action: https://x.thunkable.com/copy/5aa7186d39eea10001c7d4d8
Here are some common database rules you can cut and paste into your own Firebase app:
{
"rules": {
// This rule gives anyone on the internet read and write access to public/*
"public": {
".read": true,
".write": true
},
// This rule gives signed in users read and write access to authenticated/*
"authenticated": {
".read": "auth != null",
".write": "auth != null"
},
// This rule gives signed in users read and write acccess to users/<userId>/*
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}