So as I'm integrating GameSparks into Unity for the first time, I'm googling any questions I have, but a lot is out of date it seems.
So I'm thinking of handling my current app startup as such:
I'll try my best to clear these up for you.
1. In order for a player to send an event they must be authenticated. With GameSparks used within Unity we use WebSockets as the means of sending events including Authentication Requests. If the web socket has been disconnected for a period of time a player will have to authenticate again in order to send events, it would be possible to cache the player credentials client side or to use Device Authentication but an Authentication Request must be sent in order to sign the player back into the GameSparks account and hence send events again. So to answer your 1st TL;DR question your flow seems to be fine. With regard to isAuthencated. An event sent in which a player isn't authenticated will return an error with Not Authenticated as the message. Yes an appropriate way would be to test GameSparks.Core.GS.Authenticated(); this will return true if the current user is authenticated.
2. This really would depend on the game data involved, from a possibility point of view yes this seems fine but please keep in mind our system limits, I've linked them here https://docs.gamesparks.com/documentation/key-concepts/system-limits.html please also keep in mine that setDurable is intended for minor / temporary breaks in communication it is not intended as an event queue. I would be inclined to manage my own queue of events in this particular case.
3. As far as I can tell this data isn't open for manipulation.
4. I explained in point 1 about GameSparks.Core.GS.Authenticated()
5. In so far as knowing whether you have an internet connection I would imagine so, GameSparks.Core.GS.Available I don't think is queryable like the Unity methods.
Hope this helps,