Buenas de nuevo, vuelvo con mas dudas otra vez jajaja. Esta vez, quizás mas técnicas.
El caso es que nos hemos juntado 4 amigos en una oficina y estamos dedicando nuestro tiempo libre (que para algunos es mucho xD) a intentar desarrollar juegos para móviles. Y antes de empezar con un proyecto mas grande que tenemos en paralelo, en proceso de diseño y de bocetos, nos hemos dedicado a hacer pequeñas pruebas de equipo, para desengrasarnos y engrasar a los nuevos jeje.
Nos hemos puesto a hacer un pequeño tower defense bastante sencillo, pero a la vez con programación que pudiésemos aprovechar para los siguientes proyectos. Una vez acabe con la cuadricula y una pequeña IA para los bichos (soy uno de los programadores xD aunque novato como ya visteis), a un compañero se le ocurrió la idea de aprovechar y aprender a integrar la aplicación en Facebook, ya que en nuestro siguiente proyecto, vemos necesario su integración si o si. La meta era simplemente guardar la máxima puntuación de cada usuario, y ver la puntuación máxima de tus amigos.
Me baje el SDK de Facebook, instale el package, examine el ejemplo que venia con el package, corrí la escena, y todo correcto... O eso pensaba, pues solo lo corría en el editor, y al correrlo en web fallaba. El caso es que cree un proyecto a parte solo para aprender como funcionaba, y hacer mis pruebas. Seguí los tutoriales de Facebook, y me cree una cuenta de desarrollador, asigne la AppId en Unity, ademas de sacar el hashkey para debug con contraseña "android". Me di cuenta de que el código del ejemplo del SDK, era demasiado para lo que necesitaba, ademas de que al parecer no funcionaba correctamente. Así que busque por Internet uno mas simplificado, pego aquí el susodicho :
using UnityEngine;
using System.Collections;
using Facebook; // Must be specified to use HTTpMethod class
public class FacebookController : MonoBehaviour
{
public bool isEnabled;
public bool isLogged;
public string userId;
Texture pic;
void Awake()
{
isEnabled = false;
isLogged = false;
userId = "not received";
}
private void SetInitFB()
{
// This method method will be called withing the callback received by FB.Init()
isEnabled = true;
}
private void SetAvailability(bool a_status)
{
// This method method will be called withing the callback received each time Unity gets or looses Focus (True/false)
}
void LoginCallBack(FBResult result)
{
if (result.Error != null)
{
Debug.Log("Receive callback login error :: " + result.Error.ToString());
}
else
{
if (FB.IsLoggedIn)
{
// Case login was successful
isLogged = true;
userId = FB.UserId;
}
else
{
// Case login failed (because of cancelling for example)
isLogged = false;
}
}
}
void GetProfilePicAnswer(FBResult response)
{
// This method method will be called withing the callback received by FB.API()
// You can add a control here for any kind of failure to print up a default picture for example
if (response.Texture != null)
{
pic = response.Texture;
}
}
void Start()
{
// Must call FB.Init Once
FB.Init(SetInitFB, SetAvailability);
}
void OnGUI()
{
if (isEnabled)
{
if (!isLogged)
{
if (GUI.Button(new Rect(5, 5, 100, 40), "Login FB"))
{
// In the string you are sending within the login process you can specify wich "permissions" you are asking for (in this case only to get the user's email)
FB.Login("email", LoginCallBack);
}
}
else
{
GUI.Label(new Rect(120, 5, 200, 40), userId);
if (GUI.Button(new Rect(5, 5, 100, 40), "GetPic"))
{
FB.API("/me/picture", HttpMethod.GET, GetProfilePicAnswer);
}
}
if (pic != null)
{
GUI.DrawTexture(new Rect((Screen.width - pic.width) / 2, (Screen.height - pic.height) / 2, pic.width, pic.height), pic);
}
}
}
}
Al darle al botón "Login FB" me dice que el usuario ya esta logueado, y no ocurre absolutamente nada. El ejemplo ahora también lo hace, y creo que es debido a que cambie el AppId, puesto que sin ello funcionaba bien.
El error en cuestión es este:
User is already logged in. You don't need to call this again.
UnityEngine.Debug:LogWarning(Object)
FbDebug:Warn(String)
Facebook.EditorFacebook:Login(String, FacebookDelegate) (at Assets/Facebook/Scripts/EditorFacebook.cs:89)
FB:Login(String, FacebookDelegate) (at Assets/Facebook/Scripts/FB.cs:111)
FacebookController:OnGUI() (at Assets/SCRIPTS/FacebookController.cs:91)
A alguno os ha pasado lo mismo ? sera problema de configuración ? o es algo que se me ha pasado ? Estamos pensando incluso en buscar un asset que nos facilite la faena, porque el asset de Facebook estamos viendo que da bastante problemas. Incluso nos da problemas a la hora de compilar en Android, y no genera el .apk debido a la clase R de facebook.
Cualquier ayuda es bienvenida, ya que andamos un poco perdidos aun con este tema.. Gracias de antemano!