Unity和Facebook:返回null而不是实际结果

时间:2017-11-19 23:51:45

标签: facebook-graph-api unity3d

我这里有这个代码:

private Texture profilePic;

public Texture GetProfilePic()
{
    FB.API("me/picture?width=100&height=100", HttpMethod.GET, ProfilePicCallback);

    return profilePic;
}

private void ProfilePicCallback(IGraphResult result)
{
    if (result.Error != null || !FB.IsLoggedIn)
    {
        Debug.LogError(result.Error);
    }
    else
    {
        Debug.Log("FB: Successfully retrieved profile picture!");
        profilePic = result.Texture;
    }
}

然而不知何故,当我调用GetProfilePic函数时,即使"成功"它也会返回null。消息已在控制台中打印。我已经正确设置了Facebook ID等等,所以它不可能。这里发生了什么,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

所以我找到了解决方案。事实证明,正如CBroe所提到的,我没有正确处理异步请求。

我的新代码现在使用Promise设计模式,类似于在JavaScript中完成的方式(不是UnityScript!)

我使用此处的代码正确实现它:https://github.com/Real-Serious-Games/C-Sharp-Promise

这是我的新代码:

public IPromise<Texture> GetProfilePic()
{
    var promise = new Promise<Texture>();

    FB.API("me/picture?width=100&height=100", HttpMethod.GET, (IGraphResult result) => 
    {
        if (result.Error != null || !FB.IsLoggedIn)
        {
            promise.Reject(new System.Exception(result.Error));
        }
        else
        {
            promise.Resolve(result.Texture);
        }
    });

    return promise;
}

然后,以这种方式调用此函数:

GetProfilePic()
    .Catch(exception => 
    {
        Debug.LogException(exception);
    })
    .Done(texture =>
    {
        Debug.Log("FB: Successfully retrieved profile picture!");

        // Notice that with this method, the texture is now pushed to
        // where it's needed. Just change this line here depending on
        // what you need to do.
        UIManager.Instance.UpdateProfilePic(texture);
    });

希望这可以帮助别人!