Как получить изображение профиля пользователя с помощью Facebook Unity SDK?

Я пытаюсь получить аватар пользователя игры, используя это -

void MyPictureCallback(FBResult result) // store user profile pic
{
        if (FB.IsLoggedIn)
        {
            WWW url = new WWW("http" + "://graph.facebook.com/" + FB.UserId + "/picture");

            Texture2D textFb2 = new Texture2D(128, 128, TextureFormat.ARGB32, false); //TextureFormat must be DXT5

            url.LoadImageIntoTexture(textFb2);
            profilePic.renderer.material.mainTexture = textFb2;
        }

Но это не работает. Я не получаю ошибок.


person Jason Pietka    schedule 03.11.2013    source источник
comment
Я получаю изображение, но оно нацарапано.   -  person Jason Pietka    schedule 03.11.2013


Ответы (5)


Ответ Джейсона Пьетки в порядке, но немного устарел. Сегодня мы FB.API:

FB.API("me/picture?type=med", Facebook.HttpMethod.GET, GetPicture);

GetPicture - это метод обратного вызова, поэтому:

private void GetPicture(FBResult result)
{
    if (result.Error == null)
    {          
        Image img = UIFBProfilePic.GetComponent<Image>();
        img.sprite = Sprite.Create(result.Texture, new Rect(0,0, 128, 128), new Vector2());         
    }

}
person No Idea For Name    schedule 13.06.2015

Я исправил это с помощью этого-

WWW url = new WWW("https" + "://graph.facebook.com/" + userId + "/picture?type=large"); //+ "?access_token=" + FB.AccessToken);

            Texture2D textFb2 = new Texture2D(128, 128, TextureFormat.DXT1, false); //TextureFormat must be DXT5

            yield return url;
            profilePic.renderer.material.mainTexture = textFb2;
            url.LoadImageIntoTexture(textFb2);
            Debug.Log("Working");
person Jason Pietka    schedule 03.11.2013

С Facebook SDK 7.2.2 это отлично работает, если вам нужно квадратное изображение определенного размера. Подробнее читайте здесь, в Facebook: https://developers.facebook.com/docs/graph-api/reference/user/picture/

public Image ProfilePicture;
FB.API("me/picture?type=square&height=128&width=128", HttpMethod.GET, FbGetPicture);
private void FbGetPicture(IGraphResult result)
{
    if (result.Texture != null)
        ProfilePicture.sprite = Sprite.Create(result.Texture, new Rect(0, 0, 128, 128), new Vector2());
}
person Johan Danforth    schedule 05.11.2015

Вот протестированный код для Facebook SDK 7.10.1 для загрузки изображения профиля.

StartCoroutine(getFBPicture(AccessToken.CurrentAccessToken.UserId));

public IEnumerator getFBPicture(string facebookId)
    {
        var www = new WWW("http://graph.facebook.com/" + facebookId + "/picture?width=240&height=240&type=square&redirect=true");
        Debug.Log ("http://graph.facebook.com/" + facebookId + "/picture?width=210&height=210&type=normal&redirect=true"+"\t"+www.error);
        yield return www;

        if (www.isDone) {
            Debug.Log ("waiting" + www.bytesDownloaded);
            Texture2D tempPic = new Texture2D (25, 25);
            tempPic = www.texture;
            PlayerImage = tempPic;
        }
person Robin Anttal    schedule 25.01.2018

Каким-то образом я получал результат. Текстура всегда была нулевой ..

поэтому я использовал код из https://github.com/fbsamples/friendsmash-unity

даже у этого кода есть проблемы, если вы компилируете напрямую ..

LoadPictureAPI (Util.GetPictureURL ("я", 100, 100), MyPictureCallback);

delegate void LoadPictureCallback (Texture texture);


IEnumerator LoadPictureEnumerator(string url, LoadPictureCallback callback)    
{
    WWW www = new WWW(url);
    yield return www;
    callback(www.texture);
}
void LoadPictureAPI (string url, LoadPictureCallback callback)
{
    FB.API(url,Facebook.HttpMethod.GET,result =>
           {
        if (result.Error != null)
        {
            Util.LogError(result.Error);
            return;
        }

        var imageUrl = Util.DeserializePictureURLString(result.Text);

        StartCoroutine(LoadPictureEnumerator(imageUrl,callback));
    });
}
void LoadPictureURL (string url, LoadPictureCallback callback)
{
    StartCoroutine(LoadPictureEnumerator(url,callback));

}


void MyPictureCallback(Texture texture)
{
    Util.Log("MyPictureCallback");
    Image im = GetComponent <Image>();
    if (texture ==  null)
    {
        LoadPictureAPI(Util.GetPictureURL("me", 100, 100),MyPictureCallback);

        return;
    }
    Vector2 v = new Vector2 (0, 0);
    Rect r = new Rect (0f,0f,100f,100f);
    im.sprite = Sprite.Create((Texture2D)texture, r, v);
}
person Amarnath    schedule 24.06.2015
comment
Будьте осторожны при использовании WWW для доступа к профилю пользователя. CDN Facebook часто возвращает URL-адрес с перенаправлением 302 на фактический URL-адрес изображения, а WWW не поддерживает автоматическое перенаправление. Вы должны обнаружить 302, затем прочитать URL-адрес перенаправления и снова использовать его в WWW, чтобы загрузить его. Или используйте библиотеку HTTP, такую ​​как Uniweb, которая сделает это за вас. - person peterept; 25.06.2015