예제 #1
0
    // Funcao para pegar a foto do usuario
    // Retorna foto como Texture
    public IEnumerator GetPicture(string _facebookId, FacebookAPI.Picture type, FacebookAPI.GetPictureCallback callback, int tries = 0)
    {
        // Se ja estiver cacheada as informacoes, somente enviar para o callback
        if (users.ContainsKey(_facebookId) && users[_facebookId].picture != null)
        {
            // Cacheia todos os tamanhos de fotos possiveis (square, small, etc) e retorna pro callback somente
            // se tiver cacheado o tamanho de foto correto solicitado
            if (type == FacebookAPI.Picture.Square && users[_facebookId].picture.square != null)
            {
                if (callback != null)
                {
                    callback(null, _facebookId, users[_facebookId].picture.square);
                }
                yield break;
            }
            else if (type == FacebookAPI.Picture.Large && users[_facebookId].picture.large != null)
            {
                if (callback != null)
                {
                    callback(null, _facebookId, users[_facebookId].picture.large);
                }
                yield break;
            }
            else if (type == FacebookAPI.Picture.Small && users[_facebookId].picture.small != null)
            {
                if (callback != null)
                {
                    callback(null, _facebookId, users[_facebookId].picture.small);
                }
                yield break;
            }
            else if (type == FacebookAPI.Picture.Medium && users[_facebookId].picture.medium != null)
            {
                if (callback != null)
                {
                    callback(null, _facebookId, users[_facebookId].picture.medium);
                }
                yield break;
            }
        }

        // Caso contrario, fazer uma conexão ao facebook para pegar as informacoes
        // Cria URL do request
        string url = GRAPH_URL + _facebookId + "/picture/?";

        if (_facebookId == "me")
        {
            url += "access_token=" + WWW.EscapeURL(facebookToken) + "&";
        }
        url += "type=" + type.ToString().ToLower();
        WWW getPicture = new WWW(url);

        yield return(getPicture);

        // Se houver algum erro, enviar erro para o callback
        if (getPicture.error != null)
        {
            if (callback != null)
            {
                callback(getPicture.error, _facebookId, null);
            }
        }

        // Caso contrario, validar foto recebida
        else
        {
            // Checa se a foto não esta no formato de GIF (formato não suportado pela Unity3D)
            if (getPicture.text.StartsWith("GIF"))
            {
                if (callback != null)
                {
                    callback("User images are GIF format!", _facebookId, null);
                }
                yield break;
            }

            // Cacheia as informacoes recebidas
            Texture          picture = getPicture.texture;
            FacebookAPI.User user    = (users.ContainsKey(_facebookId)) ? users[_facebookId] : new FacebookAPI.User();
            if (user.picture == null)
            {
                user.picture = new FacebookAPI.User.Picture();
            }
            if (type == FacebookAPI.Picture.Square)
            {
                user.picture.square = picture;
            }
            else if (type == FacebookAPI.Picture.Large)
            {
                user.picture.large = picture;
            }
            else if (type == FacebookAPI.Picture.Small)
            {
                user.picture.small = picture;
            }
            else
            {
                user.picture.medium = picture;
            }

            // Envia pro callback
            if (callback != null)
            {
                callback(null, _facebookId, picture);
            }
        }
        yield break;
    }
예제 #2
0
    // Funcao para pegar informacoes do usuario
    // Retorna FacebookId, Nome, Sobrenome, e Login
    public IEnumerator GetInfo(string _facebookId, FacebookAPI.GetInfoCallback callback, int tries = 0)
    {
        // Se ja estiver cacheada as informacoes, somente enviar para o callback
        if (users.ContainsKey(_facebookId) && users[_facebookId].firstName != null)
        {
            if (callback != null)
            {
                callback(null, _facebookId, users[_facebookId].firstName, users[_facebookId].lastName, users[_facebookId].userName);
            }
            yield break;
        }
        // Caso contrario, fazer uma conexão ao facebook para pegar as informacoes
        else
        {
            // Cria URL do request
            string url = GRAPH_URL + _facebookId + "/?";
            if (_facebookId == "me")
            {
                url += "access_token=" + WWW.EscapeURL(facebookToken) + "&";
            }
            url += "fields=username,first_name,last_name";
            WWW getInfo = new WWW(url);
            yield return(getInfo);

            // Se houver algum erro, enviar erro para o callback
            if (getInfo.error != null)
            {
                if (callback != null)
                {
                    callback(getInfo.error, _facebookId, null, null, null);
                }
            }

            // Caso contrario, decodar JSON recebido
            else
            {
                IJSonObject data = getInfo.text.ToJSon();

                // Se o JSON recebido for invalido, retornar e enviar para o callback
                if (data.IsEmpty() || data.IsError())
                {
                    if (callback != null)
                    {
                        callback("Invalid JSon: " + getInfo.text, _facebookId, null, null, null);
                    }

                    yield break;
                }

                // Cacheia as informacoes recebidas
                FacebookAPI.User user = (users.ContainsKey(_facebookId)) ?
                                        users[_facebookId] : new FacebookAPI.User();
                user.facebookId = _facebookId;
                user.firstName  = data.GetString("first_name");
                user.lastName   = data.GetString("last_name");
                user.userName   = data.GetString("username");

                // Envia pro callback
                if (callback != null)
                {
                    callback(null, _facebookId, user.firstName, user.lastName, user.userName);
                }
            }
        }
        yield break;
    }