【问题标题】:Facebook C# SDK and Web API - (OAuthException - #120) (#120) Invalid album idFacebook C# SDK 和 Web API - (OAuthException - #120) (#120) 无效的专辑 ID
【发布时间】:2015-01-25 20:24:34
【问题描述】:

我有一个客户端应用程序向 Facebook 进行身份验证,然后将访问令牌提供给使用 Facebook C# SDK 的 Web API 方法,例如发布到用户的相册:

var facebook = new FacebookClient(photoDTO.FacebookSessionToken);

dynamic result = facebook.Post("me/photos",
                    new
                    {
                        message = photoDTO.Photo.Comments,
                        file = new FacebookMediaObject
                        {
                            ContentType = "image/jpeg",
                            FileName = fileName,
                        }.SetValue(imageBytes)
                    });

这段代码曾经可以工作,但现在我遇到了一个异常:“(OAuthException - #120) (#120) Invalid album id”。我相信这个错误与身份验证令牌有关,但我已经通过浏览到 https://graph.facebook.com/me?access_token=... 来检查令牌是否有效,并且它确实正确返回了当前登录到应用程序的用户的个人资料。我正在使用 SDK 版本 6.0.10.0。

如何使用从客户端应用传递的身份验证令牌发布到当前登录用户的个人资料?

【问题讨论】:

    标签: facebook facebook-graph-api asp.net-web-api


    【解决方案1】:

    不确定这是一个答案还是一个解决方法,但由于我知道我想要发布到的专辑的名称,我查询用户的专辑以获取专辑 ID,然后使用它直接发布到专辑:

    var facebook = new FacebookClient(photoDTO.FacebookSessionToken);
    
    string albumId = null;
    string albumName = "Album";
    dynamic albums = facebook.Get("me/albums");
    
    // Get the album id of the album we want to post to
    foreach(dynamic albumInfo in albums.data)
    {
        if (albumInfo.name == albumName)
        {
            albumId = albumInfo.id;
            break;
        }
    }
    
    // If album does not exist, create it
    if (albumId == null)
    {
        dynamic album = facebook.Post("me/albums",
                            new
                            {
                                name = albumName
                            });
    
        albumId = album.id;
    }
    
    // Post the photo to the album                
    dynamic photo = facebook.Post("/" + albumId + "/photos",
                        new
                        {
                            message = photoDTO.Photo.Comments,
                            file = new FacebookMediaObject
                            {
                                ContentType = "image/jpeg",
                                FileName = fileName,
                            }.SetValue(imageBytes)
                        });
    

    【讨论】:

    • 您需要 /me 专辑的等效 ID。可能这就是 Facebook 改变的重点,您需要增加权限才能对用户的相册感到愤怒?
    【解决方案2】:

    请注意,专辑 ID 与专辑名称不同,这是您将专辑 ID 与专辑名称进行比较的问题!查看相册apihere

    正确的算法是:

    找到专辑ID,如果有,则将媒体发布到指定ID,否则处理错误

    FB.api(
        "/{album-id}",
        function (response) {
          if (response && !response.error) {
            //album was found , your code goes right here.
          }
         else {
            //album was not found handle your error.
          }
    
        }
    );
    

    【讨论】:

    • 但是 /me 是一个众所周知的专辑名称,每个人都可以使用它并且具有一些独特的属性。那已被删除。是不是被别的东西代替了?它刚刚从api中撤回了吗?只是权限问题吗?
    • @JamesWestgate 如果专辑 ID 在结果响应中返回,那么您将得到许多问题的答案,如果它没有返回,并且您确定它存在,这是另一个问题那么,你将不得不澄清更多的东西,以便我可以帮助你。
    • 感谢您到目前为止提供的帮助。尽管我没有问这个问题,但我提供了赏金。就所提供的赏金而言,如果有一种方法可以找到 /me/photos 的 /me 部分引用的专辑 ID,并详细说明与不需要的旧方法相比,这需要什么权限,则可能会获得奖励任何。
    • @JamesWestgate 我不帮助人们获得赏金,我帮助人们,因为它让我感到快乐:),希望我能帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2016-11-29
    相关资源
    最近更新 更多