Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema de integracion SDK Facebook en Unity.

Iniciado por Art Productions, 22 de Octubre de 2013, 09:32:33 PM

« anterior - próximo »

Art Productions

Buenas, nos ha surgido un problema relacionado con la integracion del SDK de Facebook al Unity 4.2

El caso es que nos hemos juntado 4 amigos en una oficina , 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.

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, 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 en Facebook y en el programa base.

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 ? 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!

10Shu Team
Compositor - Productor musical y Guitarrista






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.