【问题标题】:Cannot Get Facebook Profile Picture Using www in Unity Facebook SDK无法在 Unity Facebook SDK 中使用 www 获取 Facebook 个人资料图片
【发布时间】:2016-01-20 14:59:00
【问题描述】:

我正在尝试使用 Facebook SDK for Unity 7.3.0 从 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 设备中,“已完成”。线不显示。并且没有错误日志。它只是一直在 url 行中等待。

我在 iOS 7 和 9 上尝试了无线连接和移动数据。问题仍然出现。

【问题讨论】:

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


    【解决方案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/

    【讨论】:

      【解决方案2】:

      我用过,效果不错,试试看

      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);
      }
      

      问题是创建一个新的精灵,不知道为什么,但它是这样工作的

      【讨论】:

      • 其实我的问题是,我无法获取url中的数据。 Debug.Log 语句未显示在控制台中。我的代码也适用于 Unity 播放器和 Android 设备。我的问题出在 iOS 上。
      • 如果调试语句没有显示这意味着 www 没有连接,您是否检查了 ios 设备上的互联网连接?我遇到了同样的问题,由于 ram 指向,数据无法在 ios 中设置为相同的精灵......所以我需要创建另一个......
      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多