【问题标题】:unity facebook sdk get profile picture using www not workingunity facebook sdk 使用 www 获取个人资料图片不起作用
【发布时间】:2014-12-17 11:42:50
【问题描述】:

我正在尝试使用 facebook sdk 获取 facebook 个人资料照片

当我使用此代码时,它工作正常,但突然第二天 url 没有下载。 url download completed 不打印,显示没有错误。

private IEnumerator getProfilePicture()
{
    Debug.Log("Here  to get profile picture");

    WWW url = new WWW("https" + "://graph.facebook.com/" + FB.UserId + "/picture?type=square"); 

    yield return url;

    Debug.Log("url download completed");
    Texture2D textFb2 = new Texture2D(url.texture.width, url.texture.height, TextureFormat.ARGB32, false);

    Sprite sprite = Sprite.Create(url.texture, new Rect(0, 0, url.texture.width, url.texture.height), new Vector2(0.5f, 0.5f), 32);
    spriteToDisplay.GetComponent<SpriteRenderer>().sprite = sprite;
}

【问题讨论】:

  • 它对我有用 - 你确定你用 StartCoroutine(getProfilePicture()); 调用它吗? ?
  • 是的,我尝试使用 StartCoroutine(getProfilePicture());和 StartCoroutine("getProfilePicture");两者加上我尝试使用不同的 facebook appid 但它没有打印 url 下载完成
  • download.unity3d.com/webplayer/images/unity-icon-big.jpg - 在 www 字段中提供此字符串可以正常工作
  • @GameDev,这是否发生在所有用户身上?您是否在浏览器上尝试过相同的调用?您可能无法再访问用户的 /picture
  • facebook 默认允许访问基本个人资料 :public_profile 提供对个人基本信息的访问权限,包括名字、姓氏、个人资料图片、性别和年龄范围。默认情况下批准此权限。(从 facebook 应用程序复制)。是的,如果我在浏览器中输入该网址,它将提供我的个人资料图片

标签: facebook unity3d unityscript facebook-unity-sdk


【解决方案1】:

您发送到 Facebook 的请求会导致 302 重定向到存储在 Facebook 的 CDN 中的图像。它不适合您的原因是 Unity 的 WWW 类从未正确支持 302 重定向。

可能是因为资源没有传播到 CDN 网络,所以它工作了一天左右,但一旦传播,你就不能再下载它了。

使用 curl 可以看到 302:

$ curl https://graph.facebook.com/zuck/picture?type=square -I
HTTP/1.1 302 Found
Location: https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/c14.4.153.153/s50x50/1939620_10101266232851011_437577509_n.jpg?oh=6b6cd8460210e1de160cf8a6056df416&oe=550D5F6C&__gda__=1429858477_b29a956770b6173d71cb28eb35fa99e6
Facebook-API-Version: v1.0
Content-Type: image/jpeg
Pragma: no-cache
Access-Control-Allow-Origin: *
X-FB-Rev: 1534884
Cache-Control: private, no-cache, no-store, must-revalidate
Expires: Sat, 01 Jan 2000 00:00:00 GMT
X-FB-Debug: 3+McQVKq40Qa/6hLThwOwQTXP5dpENQqA5FvbX3elTkVxKsEw6ISvJG0eh0V5wVTUjC4fkmuZ1coTCDm2rLTZg==
Date: Wed, 17 Dec 2014 13:33:13 GMT
Connection: keep-alive
Content-Length: 0

一个建议是使用处理 302 的 Uniweb 库。

或者自己处理 302,提取 Location 响应头并发送另一个 WWW 请求。 (但响应标头并非在所有平台上都可用)。

【讨论】:

  • 感谢您的回复。我不允许有付费插件..还有其他选择吗?
  • 在这种情况下,您可以使用 var redirection = www.responseHeaders["LOCATION"] 向您的代码添加检查,如果响应有一个新的位置可以访问(注意:必须为大写) .如果是这样,做另一个 www 请求 www = new WWW(redirection);收益回报 www;
  • 嘿,谢谢你的回复,如果可能的话,你能给我写一个示例代码吗?与 www 合作对我来说真的很新鲜,而且我根本没想到
  • 正如您发布的那样,您几乎已经了解了使用 WWW 的所有内容。我使用 Unity 文档作为参考:docs.unity3d.com/ScriptReference/WWW.html 只需在上面添加我的代码以检查位置即可!
  • 通过使用这个 Debug.Log("Here to get profile picture"); WWW url = new WWW("https" + "://graph.facebook.com/" + FB.UserId + "/picture?type=square"); var redirection = url.responseHeaders["LOCATION"]; Debug.Log("重定向响应" + 重定向);收益返回网址; Debug.Log("url下载完成"); - 它给我的错误是 www 尚未完成下载。
【解决方案2】:

终于在苦苦挣扎了几天后找到了答案,而我得到的有点奇怪..

当我使用相同的代码而不更改任何内容时,不检查任何内容并运行到 android 设备上它工作正常,

我的手机应该连接到数据包并且不要连接到 wi-fi...

需要注意的是,对 wi-fi 网络没有限制,我可以通过 wi-fi 网络使用 facebook...加上 score 、 name 和其他东西在 wi-fi 上工作......它只是如果我想下载个人资料图片,我必须通过数据包数据连接我的手机

【讨论】:

  • 您很可能会通过蜂窝网络和 wifi 获得不同的上游代理。这就是为什么你会得到不同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2018-11-19
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多