The answer, thanks to @Brian Jew, is in the comments of his answer. I am moving to here to make it easier for others to find:
The answer is quite simple... Init.Start was calling FB.Init but not FB.Login. Here is updated code:
In any script that launches your game, you can put a "start" button:
if (!FB.IsLoggedIn) {
//START
if (GUI.Button(new Rect(Screen.width * 0.55f, Screen.height * 0.7f, Screen.height * 0.2f * (float)1920/700, Screen.height * 0.2f), "", "Enter"))
Init.Start();
return;
}
}
Then "Init" is my own custom script that just runs some initial startup stuff. Inside is this:
public static void Start(){
FB.Init(OnInitComplete, OnHideUnity);
}
private static void OnInitComplete()
{
dMsg += "FB.Init completed: Is user logged in? " + FB.IsLoggedIn;
if (!FB.IsLoggedIn) FB.Login(); //<--- Magic login code! :P
isInit = true;
}
private static void OnHideUnity(bool isGameShown)
{
dMsg += "Is game showing? " + isGameShown;
}