Hi Sam,
Overall, Firebase has been great. That said, I did struggle with some issues.
Things I thought were difficult include:
With Authentication, the Unity documentation was challenging. I had to go and get a branch off a github library to get the Google Sign-in to work (iOS library problems). The Firebase docs link to direct Android/Swift code for getting the initial authorization which goes against the whole reason people are using Unity. They want a Unity library that can generate either solution without needing native code.
The second difficulty with authentication is getting the callback to notify the client app that a user is authenticated. I wanted to wait for a full authentication, and then use that to call my Node.js servers to access my SQL database. I would guess this is a fairly common codeflow, but was quite difficult to finally get to work.
With storage, I tried using an embedded function to resize images for profiles, but ended up pulling it out. I only wanted the function to apply to certain subfolders, and that didn't seem to be possible.
With Real Time Database, I read a bunch of posts online about costs getting out of control. That led me to greatly minimize the information I store just down to the keys for the objects that have changed. When a change is triggered I provide the key from my mobile client to the NodeJS server to pull the full data from the SQL database. A chunk of work could have been avoided if the costs were in line with what I'm paying for my MySQL databases.
With Dynamic Links, the android stuff stopped working as soon as I needed to minify my app because the 64K limit on the Dex table was exceeded. It requires fixing up the Proguard config file, which would have been good to have mentioned in the docs.
Those were the big ones, but once again, overall I've found Firebase to be hugely valuable. Hope that helps.