【问题标题】:How to get user's profile picture with Facebook's Unity SDK?如何使用 Facebook 的 Unity SDK 获取用户的头像?
【发布时间】:2013-11-03 18:32:35
【问题描述】:

我正在尝试使用此获取游戏用户的个人资料图片-

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

但它不起作用。我没有收到任何错误。

【问题讨论】:

  • 我得到了一张图片,但图片乱码。

标签: android unity3d facebook-unity-sdk


【解决方案1】:

Jason Pietka 的回答还可以,但有点老了。 今天我们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());         
    }

}

【讨论】:

    【解决方案2】:

    我用这个修复了它-

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

    【讨论】:

      【解决方案3】:

      使用 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());
      }
      

      【讨论】:

        【解决方案4】:

        这里是 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;
                }
        

        【讨论】:

          【解决方案5】:

          我是如何得到结果的。Texture 总是为空..

          所以我使用了https://github.com/fbsamples/friendsmash-unity的代码

          如果你直接编译,即使这段代码也会有一些问题。

          LoadPictureAPI(Util.GetPictureURL("me", 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);
          }
          

          【讨论】:

          • 小心使用 WWW 访问用户配置文件。 Facebook 的 CDN 通常会返回一个带有 302 重定向的 URL 到实际的图像 URL,而 WWW 不支持自动重定向。您必须检测 302 然后读取重定向 URL 并再次在 WWW 中使用它来下载它。或者使用像 Uniweb 这样的 HTTP 库来为你做这件事。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多