I'm answering my own questions, but whatever. Maybe someone will find it helpful.
My way of thinking was not really compatible with Firebase way of doing things.
The way I made it work, with Twitter Digits is like this, after user authenticated through usual flow:
In onCreate we check for Digits auth data and firebase token. If either one is missing - tough shit, return to start. Like monopoly. But If we already authenticated with digits, we smoothly get firebase token and go to application entry point.
If the token expiration set to reasonably long time (say couple of days) this will almost never be needed, because if user won't come back to your app for this long (pressed home button and doing something else), it will probably be scrapped by android, and when user do come back, it will be through normal entry point, because the activity he was at would be recycled. Either way result will be same.
To keep token fresh, I check for token expiration date preemptively and attach/detach AuthStateListener to some lifecycle events (onResume/onPause) just to be safe. This way if user uses app normally token will always be fresh.
This leaves us with a negligible chance of data being lost or permission errors.