Buenas!
Veréis, tengo un problema con la conexión de Google Play Services a la hora mostrar logros y las puntuaciones. Cuando entro por primera vez a mi juego, logea y puedo verlas perfectamente, pero a la que cambio de escena, es como si la sesión se perdiera y ya no hiciera login ni nada. Los botones de mostrar logros y demás dejan de funcionar.
He probado en beta y en producción, y ocurre lo mismo. También he probado el "PlayGamesPlatform.Instance.IsAuthenticated();" para comprobar el logeo en lugar del "Social.localUser.authenticated", pero ocurre el mismo problema. En el logcat no encuentro nada raro... El código que uso es el siguiente:
spoilerusing GooglePlayGames;
using GooglePlayGames.BasicApi;
using UnityEngine;
using System;
public class LeaderBoardManager : MonoBehaviour {
private static LeaderBoardManager instance = null;
public static LeaderBoardManager Instance
{
get { return instance; }
}
void Awake()
{
if (instance != null && instance != this)
{
Destroy(this.gameObject);
return;
}
instance = this;
DontDestroyOnLoad(this.gameObject);
}
void Start ()
{
Login();
}
public void Login()
{
if (!Social.localUser.authenticated)
{
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
try
{
PlayGamesPlatform.Instance.Authenticate((bool success) =>
{
if (success)
{
Debug.Log("DEBUG: Login success");
}
else
{
Debug.Log("DEBUG: Login failed");
}
});
}
catch(Exception e)
{
Debug.Log("DEBUG: Excepcion en login: " + e);
}
}
}
public void ShowLeaderBoard()
{
if (Social.localUser.authenticated)
{
Debug.Log("DEBUG: Showing leaderboard");
try
{
PlayGamesPlatform.Instance.ShowLeaderboardUI(GPGSIds.leaderboard_best_times);
Debug.Log("DEBUG: Leaderboard showed");
}
catch(Exception e)
{
Debug.Log("DEBUG: Exceptiono in leaderboards: " + e);
}
}
else
{
Debug.Log("DEBUG: User not authenticated, can't show leaderboard");
Login();
}
}
public void AddScoreLeaderBoard(long timeInSeconds)
{
if (Social.localUser.authenticated)
{
try
{
Social.ReportScore(timeInSeconds * 1000, GPGSIds.leaderboard_best_times, (bool success) =>
{
if (success)
{
timeInSeconds = 0;
Debug.Log("DEBUG: Update Score success");
}
else
{
Debug.Log("DEBUG: Update Score Fail");
}
});
}
catch(Exception e)
{
Debug.Log("DEBUG: Exception adding score: " + e);
}
}
else
{
Debug.Log("DEBUG: User not authenticated, can't send score");
}
}
public void UnlockTutorialAchievement()
{
Social.ReportProgress(GPGSIds.achievement_watch_the_tutorial, 100f, (bool status) =>
{
if(!status) Debug.Log("Problems unlocking achievement");
else Debug.Log("Tutorial achievement unlocked.");
});
}
public void UnlockFirstTimeAchievement()
{
Social.ReportProgress(GPGSIds.achievement_first_time, 100f, (bool status) =>
{
if(!status) Debug.Log("Problems unlocking achievement");
else Debug.Log("First time achievement unlocked.");
});
}
public void ShowAchievements()
{
if (Social.localUser.authenticated)
{
Debug.Log("DEBUG: Showing achievements");
try
{
PlayGamesPlatform.Instance.ShowAchievementsUI((status) =>
{
Debug.Log("DEBUG: Achievements status: " + status.ToString());
});
Debug.Log("DEBUG: Achievements showed");
}
catch (Exception e)
{
Debug.Log("DEBUG: Exception in achievements: " + e);
}
}
else
{
Debug.Log("DEBUG: User not authenticated, can't show achievements");
Login();
}
}
}
Estoy usando Unity 2018.2.8f1, la versión 0.9.50 del plugin de Unity para GPGS y un min target de 4.4 (kitkat). El target máximo es 8.1 (oreo).
Si alguien tiene alguna pista de qué puede ser... Se lo agradecería.