【发布时间】:2015-09-05 20:25:03
【问题描述】:
我正在使用 Unity3d (c#) 和 facebook API。当我在统一模拟器上运行它时,我尝试在屏幕上显示我的个人资料图像,一切正常,我得到了图像。但是当我构建一个版本并在真实设备上尝试时,我什么也得不到。
我知道 facebook CDN 存在问题。请求的结果是 302 并且 WWW 类无法处理重定向,所以我做了这样的事情(c# 对我来说是一门新语言):
WWW www = new WWW(url);
yield return www;
if( www.responseHeaders.ContainsKey( "LOCATION" ) ){
var redirection = www.responseHeaders[ "LOCATION" ];
WWW wwwRe = new WWW( redirection );
yield return wwwRe;
callback( wwwRe.texture, userID );
}else{
callback( www.texture, userID );
}
请帮助我让我失去理智,为什么我的所有个人数据都出现在设备上,除了完美统一的图像。我做错了什么?
谢谢。
解决办法:
我尝试了许多选项来获取设备上的个人资料图片,但均无济于事。 最后,我将 Facebook SDK 从 6.2.1 升级到 6.2.2,将 Unity 从 5.1 升级到 5.1.3,再次从设备中删除应用程序(清除所有数据)并且它可以工作。看起来像是 Facebook 的问题(这不是他们第一次发布带有 bug 的 SDK)。
我接受 Umair 的回答,即使他的代码有一些语法问题,他真的很想帮助我,基本上他的回答是正确的。
我使用此代码来测试我的图像: (希望对某人有所帮助)
private void getMyProfileData(){
// get profile image.
FB.API( Util.GetPictureURL( "me", 128, 128 ), Facebook.HttpMethod.GET, callBackGetProfilePicture );
}
private void callBackGetProfilePicture( FBResult result ){
// in case if there some error with the image.
if( result.Error != null ){
// call this method again
}
string ImageUrl = Util.DeserializePictureURLString( result.Text );
StartCoroutine(LoadPictureCoroutune( ImageUrl ));
}
IEnumerator LoadPictureCoroutune(string url){
var profilePicRequest = new WWW( (string)url );
yield return profilePicRequest;
if( profilePicRequest.error == null)
{
Texture2D profilePic = profilePicRequest.texture;
// my test image place
Image profileImage = FBavatar.GetComponent<Image>();
profileImage.sprite = UnityEngine.Sprite.Create( profilePic, new Rect(0,0,128,128), new Vector2( 0, 0 ));
}
else
{
Debug.LogError("Error While downloading Picture: " + profilePicRequest.error);
}
}
【问题讨论】:
-
你试过没有收益回报的吗?
-
您是否添加了调试打印以查看是否进入 ContainsKey if?
-
我无法调试它,因为在模拟器中它在我添加“重定向”之前可以正常工作,因此它没有“位置”键。我不知道如何在设备上调试。 slapy - 我会在没有产量的情况下尝试,但不确定它是否有效。
-
是IOS吗?如果是这样,您可以通过 Xcode 看到 Debug.Log。
-
添加一个 Debug.Log 并检查您的 location 键的值。在 yield return wwwRe 之前添加此日志;声明,然后检查 if(wwwRe.error){ Debug.Log(wwwRe.error.ToString();)} else if(wwwRe.isDone){callback( wwwRe.texture, userID );} 这样你就会知道什么错了。
标签: c# facebook unity3d facebook-unity-sdk