To give an update on this.
I've found the following old bug from many many versions ago https://bugzilla.xamarin.com/56/56108/bug.html
I think this is what is affecting my project. I've looked now in my Resources.designer.cs. and indeed the gcm_defaultSenderId, google_api_key, and google_app_id values are not being created in there on build.
The bug says this is the responsibility of Xamarin.GooglePlayServices.Basement nuget package. Which you can see in the screenshots I currently have fully updated. I've downgraded it to the same version I had before this was happening. cleaned project. deleted obj/bin folder, deleted Resource.designer.cs (to ensure a new one is generated). Yet still this happens, no values places in the resource designer as it should be.
However this bug was for a much older version which was apparently fixed. So I have no idea why it's not working.
I should also note that when adding in gcm_defaultSenderId google_api_key google_app_id and project_id manually in Strings.xml the firebase object initializes correctly. I can also get this to initialize correctly by adding these parameters into options when initializing the firebaseapp.
However, This is not a valid solution as the Token of the created object is still null!
Why?
Update
The reason why is I was expecting it to work the same as the older version. You now have to call FirebaseMessaging.Instance.GetToken(). I have also had to add anOnCompleteListener to insure the token is received. Once this method executes the result is dumped into the same location as before: FirebaseInstanceId.Instance.Token. Where as in an older version the token would immediately be generated after firebaseapp initialization. This is no longer the case.
My initial problem still stands, though I have this workaround I would really prefer the compiler is correctly adding the parameters from google-services.json into the Resource.designer.cs