Facebook iOS 上传视频“无法从访问令牌中检索会话密钥。”

Posted

技术标签:

【中文标题】Facebook iOS 上传视频“无法从访问令牌中检索会话密钥。”【英文标题】:Facebook iOS Upload Video "Unable to retrieve session key from the access token." 【发布时间】:2011-04-05 13:23:46 【问题描述】:

我想使用 ios-sdk 在 facebook 上上传视频

我检查有问题的讨论 iPhone Facebook Video Upload 并尝试在我的应用程序中实现它

我尝试你的代码但没有成功

    我下载你的代码https://github.com/zoul/facebook-ios-sdk 将 FBVideoUpload.h/m 类从您的 src 添加添加到我的项目中

    在 FBConnect.h 中包含“FBVideoUpload.h”

    然后我编码上传视频如下

这是代码

FBVideoUpload *upload = [[FBVideoUpload alloc] init];
upload.accessToken = facebookObj.accessToken;
upload.apiKey = fbAppKey;
upload.appSecret = fbAppSecret;
NSString *filePath = @"/Users/pratgupta/Library/Application Support/iPhone Simulator/4.1/Media/DCIM/100APPLE/IMG_0010.M4V";
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                               data, @"",
                                               @"test", @"title",
                                               @"upload testing", @"description",
                                               @"EVERYONE", @"privacy",
                                               nil];
[upload startUploadWithURL:fileURL params:params delegate:self];

但在日志中出现错误,即 无法从访问令牌中检索会话密钥。

这是由于

if ([self sessionID] == nil) 
        NSLog(@"Unable to retrieve session key from the access token);
        return;

在 FBVideoUpload 类中

为了登录,我正在使用此代码

fbPermissions =  [[NSArray arrayWithObjects:
                       @"read_stream", @"offline_access", @"publish_stream",nil] retain];
facebookObj = [[Facebook alloc] initWithAppId:fbAppId];
[facebookObj authorize:fbPermissions delegate:self];

我可以从 facebook 获取我的更新,所以这里的会话正常。 你能告诉我我做错了什么吗?

编辑 在更改了 zoul 建议的登录步骤后,我现在没有收到 sessionID 错误日志。我的请求现在正在发送到 fb 服务器,但得到了这个响应

<?xml version="1.0" encoding="UTF-8"?>
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
  <error_code>100</error_code>
  <error_msg>privacy must contains a valid privacy 'value'</error_msg>
  <request_args list="true">
    <arg>
      <key>description</key>
      <value>upload testing</value>
    </arg>
    <arg>
      <key>privacy</key>
      <value>EVERYONE</value>
    </arg>
    <arg>
      <key>v</key>
      <value>1.0</value>
    </arg>
    <arg>
      <key>api_key</key>
      <value>[here is my API key]</value>
    </arg>
    <arg>
      <key>method</key>
      <value>facebook.video.upload</value>
    </arg>
    <arg>
      <key>session_key</key>
      <value>c4ada192feb82e8f239a283d-555042146</value>
    </arg>
    <arg>
      <key>sig</key>
      <value>8255d4cc3838b278b26fbfc8c86818a3</value>
    </arg>
    <arg>
      <key>title</key>
      <value>test</value>
    </arg>
  </request_args>
</error_response>

阿米特巴坦

【问题讨论】:

【参考方案1】:

隐私词典条目格式更改:

  NSDictionary * params = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"Sample video title", @"title",
                          @"Sample video description", @"description",
                          @"\"value\": \"ALL_FRIENDS\"", @"privacy",
                          nil];

Post 对象的 Graph API 文档讨论隐私对象:http://developers.facebook.com/docs/reference/api/post/

但这并不能解决视频未显示在“我的视频”中的问题,甚至无法让我的朋友看到​​它(如果他们有直接链接)。视频页面上的分享按钮也坏了,所以我什至不能把它贴到我的墙上。

【讨论】:

是的,隐私问题现在已经解决了。但很奇怪为什么视频仍然没有显示***.com/questions/5565512 我遇到了与您昨天相同的视频问题,但现在可以解决了。也许 Facebook 的服务器出了点问题。【参考方案2】:

FBVideoUpload.h中的cmets:

请注意,此代码解析 访问令牌来自 Facebook 类,它非常脆弱、非官方和 很容易与即将发布的 SDK 版本中断。还有它 似乎只适用于较旧的弹出式身份验证和 不是使用应用程序切换的新版本。 (新的认证 方案似乎导致不同的身份验证令牌格式 我们无法解析。)

您的问题看起来像是在使用现代的应用切换身份验证方案。这会导致不同的访问令牌,因此视频上传黑客不起作用。切换到旧的身份验证方案很容易,请参阅code in this branch(它向Facebook 类添加了一个forceOldStyleAuth 属性)。


至于上传时要传递的字典,我的代码如下所示:

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
    @"Sample video title", @"title",
    @"Sample video description", @"description",
    nil];
upload = [[FBVideoUpload alloc] init];
[upload setApiKey:kAPIKey];
[upload setAccessToken:facebook.accessToken];
[upload setAppSecret:kAppSecret];
[upload startUploadWithURL:movieURL params:params delegate:self];

这对我有用。

【讨论】:

是的。 (显然,您必须先合并上述分支中的代码,否则没有 forceOldStyleAuth 开头。) 现在没有出现错误日志但是没有上传视频....我得到了成功的响应但是当检查 facebook 时没有找到任何视频上传到这里。 . . . . 在日志中回复接收 received response..http://api-video.facebook.com/restserver.php 阅读original question下的讨论,你的应用类型可能有问题。 Yes :) 因为服务器不喜欢隐私设置,你应该尝试删除该行,看看是否上传成功。 您随视频传递的字典可能有误。我将使用我在代码中使用的字典来更新答案。

以上是关于Facebook iOS 上传视频“无法从访问令牌中检索会话密钥。”的主要内容,如果未能解决你的问题,请参考以下文章

使用 iOS FBSDK v4 (multipart/form-data) 上传到 facebook 时编码视频的正确方法

操作无法完成。 (com.facebook.sdk 错误 5。)FACEBOOK 视频上传

在 Facebook iOS SDK 4.4 上分享视频

iOS 我可以从 Graph api Facebook 获取上传进度吗?

iOS:无法将 Facebook 个人资料公开数据作为媒体(图片和视频)

我们可以使用 Facebook SDK 将文档目录视频上传到 Facebook