无法在Unity Facebook SDK中使用www获取Facebook个人资料图片

时间:2016-01-20 14:59:01

标签: c# facebook unity3d facebook-unity-sdk

我试图使用面向Unity 7.3.0的Facebook SDK从graph.facebook.com获取个人资料图片。我的Unity版本是5.3。

这是我的功能,

public static IEnumerator GetFBProfilePicture (){
    WWW url = new WWW (System.Uri.EscapeUriString("https://graph.facebook.com/" + someUserID + "/picture?type=large"));
    yield return url;
    Debug.Log("Completed.");
    Texture2D texture = new Texture2D (180, 180, TextureFormat.DXT1, false);
    url.LoadImageIntoTexture (texture);
    // ...

}

我将此功能称为

    StartCoroutine (GetFBProfilePicture ());

在Unity Player和Android设备中都可以正常使用。但在iOS设备中,"已完成。"线没有显示出来。并且没有错误日志。它只是在网址中等待。

我尝试使用iOS 7和9以及无线连接和移动数据。问题仍然存在。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,最后找到了解决方案(虽然不是理想的解决方案)。使用参数redirect = false发出请求似乎可以解决问题,但是它只返回图像的url,而不是图像本身。因此,您必须对图像进行第二次请求。 以下代码概述了解决方案:

//passed in URL looks like https://graph.facebook.com/some_id/picture?type=large
IEnumerator GetDownloadURL(string url, float pixelsPerUnit = 100.0f ) {
    url = url + "&redirect=false";
    WWW www = new WWW(url);
    yield return www;
    Dictionary<string,object> dict = fastJSON.JSON.Parse(www.text) as Dictionary<string,object>;
    Dictionary<string,object> dataDict = dict["data"] as Dictionary<string,object>;
    DownloadImage(dataDict["url"])
}

IEnumerator DownloadImage(string url ) {
    WWW www = new WWW(url);
    yield return www;
    Texture2D texture = newDownload.www.texture;
    ///...
}

推荐解决方案的已知问题:https://developers.facebook.com/x/bugs/364606280347510/

答案 1 :(得分:0)

我使用它,它可以工作,试试

IEnumerator getPicture(string url, SpriteRenderer spritex) {
    WWW www = new WWW (url);
    yield return www;
    Sprite sprite = new Sprite ();
    sprite = Sprite.Create (www.texture, new Rect (0, 0, 50, 50), new Vector2 (0.5f, 0.5f), 100.0f);
    spritex.sprite = sprite;
    www.LoadImageIntoTexture (spritex.sprite.texture);
}

事情是创建一个新的精灵,不知道为什么,但它的工作原理