无法在Facebook SDK for Unity中发布用户分数

时间:2016-04-13 11:22:05

标签: c# android facebook-graph-api unity3d facebook-unity-sdk

我在使用Facebook Unity SDK的Unity3D游戏中工作,使用Facebook Unity SDK存储,检索分数并制作排行榜,但我发现了问题,我无法弄清楚原因。

我正在使用:

  • Unity Pro 5.3.3f1。
  • Facebook Unity SDK 7.4.0。
  • 图谱API 2.5。

我发布了我认为制造麻烦的代码。它有时会起作用,但主要是因为没有所需的权限或者没有找到"未找到"错误。

在Facebook开发者网页中正确配置了游戏。

-

public void RequestSetScore(FacebookScore facebookScore)
{
    if (FacebookManager.Instance.accessToken == null)
    {
        FacebookManager.Instance.OnRequestSetScoreError("Application has not logged in to Facebook yet.");
        return;
    }

    if (this.PermissionIsGranted("publish_actions"))
    {
        string requestUri;
        requestUri = string.Format("{0}/scores?score={1}",
            FacebookManager.Instance.accessToken.UserId,
            facebookScore.ScoreValue.ToString());

        FB.API(requestUri, HttpMethod.POST,
            scoreSetRequestresult =>
            {
                // Esto se ejecuta cuando la respuesta se ha recibido, no inmediatamente
                if (scoreSetRequestresult.Error != null)
                {
                    // This is an event of my class
                    FacebookManager.Instance.OnRequestSetScoreError(scoreSetRequestresult.Error);
                }
                else
                {
                    // This is an event of my class
                    FacebookManager.Instance.OnRequestSetScoreSuccess();
                }
            }
        );
    }
    else
    {
        // Pedir permisos para publicar puntuaciones
        FB.LogInWithPublishPermissions(FacebookManager.Instance.publishPermissions,
            permissionRequestresult =>
            {
                // Esto se ejecuta cuando la respuesta se ha recibido, no inmediatamente
                if (permissionRequestresult.Error != null)
                {
                    string requestUri;
                    requestUri = string.Format("{0}/scores?score={1}",
                        FacebookManager.Instance.accessToken.UserId,
                        facebookScore.ScoreValue.ToString());

                    FB.API(requestUri, HttpMethod.POST,
                        scoreSetRequestresult =>
                        {
                            // Esto se ejecuta cuando la respuesta se ha recibido, no inmediatamente
                            if (scoreSetRequestresult.Error != null)
                            {
                                // This is an event of my class
                                FacebookManager.Instance.OnRequestSetScoreError(scoreSetRequestresult.Error);
                            }
                            else
                            {
                                // This is an event of my class
                                FacebookManager.Instance.OnRequestSetScoreSuccess();
                            }
                        }
                    );
                }
                else
                {
                    // This is an event of my class
                    FacebookManager.Instance.OnRequestSetScoreError(permissionRequestresult.Error);
                }
            }
        );
    }
}

// Métodos auxiliares
private bool PermissionIsGranted(string permission)
{
    AccessToken token = Facebook.Unity.AccessToken.CurrentAccessToken;
    foreach (string grantedPermission in token.Permissions)
    {
        if (grantedPermission == permission)
            return true;
    }

    return false;
}

-

关于代码的评论:FacebookScore类型是一个封装long的结构,允许我按位操作它来存储多个数字。这些方法属于类似单身的类,可以在游戏的每个点访问,并通过场景更改保留。

任何想法都对我很有价值,谢谢你。

1 个答案:

答案 0 :(得分:0)

问题解决了。我发送的是64位整数,但Facebook Graph API只能接受32位无符号整数。