C# 所有内容都以管理员帐户而不是Facebook Unity SDK中的当前用户发布

C# 所有内容都以管理员帐户而不是Facebook Unity SDK中的当前用户发布,c#,facebook,facebook-graph-api,unity3d,facebook-unity-sdk,C#,Facebook,Facebook Graph Api,Unity3d,Facebook Unity Sdk,因此,我已经与Facebook Unity SDK合作了几天,要用它完成工作真是一件非常困难的事情 所以我现在面临的问题是,所有的事情:共享、分数API、照片共享都是在管理员帐户上完成的,而不是我目前使用的帐户 示例: 我在帐户B上获得了1000分(这是我应用程序上的测试用户),然后我将尝试将该分数上传/附加到它的Facebook帐户。 相反,该分数被上传/附加到我的帐户A(该应用程序上的管理员帐户)。 同样的事情也发生在图片、共享等方面 将分数上传/附加到FB帐户的代码: public voi


因此,我已经与Facebook Unity SDK合作了几天,要用它完成工作真是一件非常困难的事情

所以我现在面临的问题是,所有的事情:共享、分数API、照片共享都是在管理员帐户上完成的,而不是我目前使用的帐户

示例:
我在帐户B上获得了1000分(这是我应用程序上的测试用户),然后我将尝试将该分数上传/附加到它的Facebook帐户。

相反,该分数被上传/附加到我的帐户A(该应用程序上的管理员帐户)。

同样的事情也发生在图片、共享等方面

将分数上传/附加到FB帐户的代码:

public void WriteScoreToFBAccount()
{
   Debug.Log("Trying to Upload attach Score to FB account...\n");
   lg.WriteToTextUIObject("Trying to Upload attach Score to FB account...\n");

   var wwwForm = new WWWForm();
   wwwForm.AddField("score", 1999);
   FB.API("/me/scores", HttpMethod.POST, FacebookProcessCallBack, wwwForm);  
}
共享图片的代码:

public void TakeAScreenShot()
{
    Debug.Log("Taking a Screenshot and trying to Upload it to FB...\n");
    lg.WriteToTextUIObject("Taking a Screenshot and trying to Upload it to FB...\n");

    ShareStatusMainWindowBackImage.SetActive(true);

    var width = Screen.width;
    var height = Screen.height;
    var tex = new Texture2D(width, height, TextureFormat.RGB24, false);

    // Read screen contents into the texture
    tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);
    tex.Apply();
    byte[] screenshot = tex.EncodeToPNG();

    var wwwForm = new WWWForm();
    wwwForm.AddBinaryData("image", screenshot, "InteractiveConsole.png");
    FB.API("me/photos", HttpMethod.POST, FacebookProcessCallBack, wwwForm);
}
示例2:[更新]

Debug.Log("Trying to get FB friends Score...\n");
lg.WriteToTextUIObject("Trying to get FB friends Score...\n");

CurrentFacebookProcess = "GetFBScoreBoard";


string url = "https" + "://graph.facebook.com/" + AccessToken.CurrentAccessToken.UserId + "/?fields=scores%7Bapplication%2Cscore%7D&";
url += "access_token=" + AccessToken.CurrentAccessToken.TokenString;
WWWForm wwwForm = new WWWForm();
FB.API(url, HttpMethod.GET, FacebookProcessCallBack, wwwForm);
public void LogIntoFB_Publish()
{
    Debug.Log("Starting a login proccess with publish permissions...\n");
    lg.WriteToTextUIObject("Starting a login proccess with publish permissions...\n");
    FB.LogInWithPublishPermissions(new List<string>() { "publish_actions"}, AuthCallback);
}
public void LogIntoFB_Read()
{
    Debug.Log("Starting a login proccess with read permissions...\n");
    lg.WriteToTextUIObject("Starting a login proccess with read permissions...\n");
    FB.LogInWithReadPermissions(new List<string>() { "public_profile", "user_games_activity", "user_friends" }, AuthRead);
}
从FB Unity SDK文档开始:

AccessToken Facebook.Unity命名空间中的一个类,包含用户最近授权应用时授予应用的访问令牌

它不应该只是那个用户的访问令牌,因为他授权了它吗? 或者情况并非如此,用户只授权应用程序

示例3:登录过程[更新]

Debug.Log("Trying to get FB friends Score...\n");
lg.WriteToTextUIObject("Trying to get FB friends Score...\n");

CurrentFacebookProcess = "GetFBScoreBoard";


string url = "https" + "://graph.facebook.com/" + AccessToken.CurrentAccessToken.UserId + "/?fields=scores%7Bapplication%2Cscore%7D&";
url += "access_token=" + AccessToken.CurrentAccessToken.TokenString;
WWWForm wwwForm = new WWWForm();
FB.API(url, HttpMethod.GET, FacebookProcessCallBack, wwwForm);
public void LogIntoFB_Publish()
{
    Debug.Log("Starting a login proccess with publish permissions...\n");
    lg.WriteToTextUIObject("Starting a login proccess with publish permissions...\n");
    FB.LogInWithPublishPermissions(new List<string>() { "publish_actions"}, AuthCallback);
}
public void LogIntoFB_Read()
{
    Debug.Log("Starting a login proccess with read permissions...\n");
    lg.WriteToTextUIObject("Starting a login proccess with read permissions...\n");
    FB.LogInWithReadPermissions(new List<string>() { "public_profile", "user_games_activity", "user_friends" }, AuthRead);
}
public void LogIntoFB\u Publish()
{
Log(“使用发布权限启动登录过程…\n”);
lg.WriteToTextUIObject(“使用发布权限启动登录过程…\n”);
FB.LogInWithPublishPermissions(新列表(){“发布操作”},AuthCallback);
}
public void LogIntoFB_Read()
{
Log(“使用读取权限启动登录过程…\n”);
lg.WriteToTextUIObject(“使用读取权限启动登录过程…\n”);
FB.LogInWithReadPermissions(新列表(){“公共配置文件”、“用户游戏活动”、“用户朋友”},AuthRead);
}
开发者控制台:

一般来说,我是Facebook SDK新手,所以任何提示都非常感谢

顺便说一句,FacebookSDK是通过他们的教程在这个Unity项目上完全配置的:

所以我的问题是,为什么我通过FB应用发布的所有内容都会进入我的管理员帐户,而不是登录到游戏中的当前帐户


另外,我想知道这是否与我的应用程序尚未获得批准有关,但测试用户仍然应该工作?
我通过这样做解决了这个问题:

1.通过注销实现登录流(非常感谢user@CBroe),如果有人已经登录,则使用简单的if语句:

if (FB.IsLoggedIn == true)
{
  Debug.Log("[Facebook SDK]: Already LOGGED In, LOGGIN OUT...\n");
  FB.LogOut();
}
else if (FB.IsLoggedIn == false)
  Debug.Log("[Facebook SDK]: User is NOT LOGGED IN, NOT DOING ANYTHING...\n");
希望这对别人有帮助

提示:

  • 同样正如@CBroe所提到的,在手机上切换帐户确实非常困难,所以请确保没有多个帐户准备好登录,因为这会干扰Facebook SDK只有一个帐户登录。
  • 请注意,一旦有人登录Facebook SDK,FB SDK并不关心您是否尝试使用另一个帐户登录,而是由他发出所有请求,在上次(或当前)登录的帐户上发布内容
  • 如果你正在测试Facebook与你的应用程序的集成,请确保你的应用程序是非LIVE(Facebook开发者控制台中应用程序附近的绿色小图标),并且它处于开发模式,并且你正在测试分配给测试者角色的用户

我通过这样做解决了这个问题:

1.通过注销实现登录流(非常感谢user@CBroe),如果有人已经登录,则使用简单的if语句:

if (FB.IsLoggedIn == true)
{
  Debug.Log("[Facebook SDK]: Already LOGGED In, LOGGIN OUT...\n");
  FB.LogOut();
}
else if (FB.IsLoggedIn == false)
  Debug.Log("[Facebook SDK]: User is NOT LOGGED IN, NOT DOING ANYTHING...\n");
希望这对别人有帮助

提示:

  • 同样正如@CBroe所提到的,在手机上切换帐户确实非常困难,所以请确保没有多个帐户准备好登录,因为这会干扰Facebook SDK只有一个帐户登录。
  • 请注意,一旦有人登录Facebook SDK,FB SDK并不关心您是否尝试使用另一个帐户登录,而是由他发出所有请求,在上次(或当前)登录的帐户上发布内容
  • 如果你正在测试Facebook与你的应用程序的集成,请确保你的应用程序是非LIVE(Facebook开发者控制台中应用程序附近的绿色小图标),并且它处于开发模式,并且你正在测试分配给测试者角色的用户

我真的很期待解决这个问题!任何提示或建议都将不胜感激!!!
/me
所指的内容取决于您使用的访问令牌。在这种情况下,它必须意味着您正在使用应用程序管理员帐户的令牌,而不是实际使用您的应用程序的用户的令牌。您是否在任何地方硬编码了令牌…?确保您确实以您认为的帐户登录。对您的访问令牌进行调试输出,然后对其进行调试,以查看它属于哪个用户帐户。我会立即尝试,并将结果告诉您。顺便说一句,我更新了答案@CBroe,请看示例2[Update],令人震惊的是,两个用户的访问令牌是相同的。所以我需要为用户生成唯一的访问令牌?@CBroeI真的很期待解决这个问题!任何提示或建议都将不胜感激!!!
/me
所指的内容取决于您使用的访问令牌。在这种情况下,它必须意味着您正在使用应用程序管理员帐户的令牌,而不是实际使用您的应用程序的用户的令牌。您是否在任何地方硬编码了令牌…?确保您确实以您认为的帐户登录。对您的访问令牌进行调试输出,然后对其进行调试,以查看它属于哪个用户帐户。我将立即尝试并告诉您结果。顺便说一句,我更新了