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

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

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

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

  1. 我下载你的代码https://github.com/zoul/facebook-ios-sdk
  2. 将 FBVideoUpload.h/m 类从您的 src 添加添加到我的项目中
  3. 在 FBConnect.h 中包含“FBVideoUpload.h”

  4. 然后我编码上传视频如下

这是代码

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>

阿米特巴坦

【问题讨论】:

    标签: cocoa-touch facebook iphone-sdk-3.0


    【解决方案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/

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

    【讨论】:

    • 是的,隐私问题现在已经解决了。但很奇怪为什么视频仍然没有显示stackoverflow.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 :) 因为服务器不喜欢隐私设置,你应该尝试删除该行,看看是否上传成功。
    • 您随视频传递的字典可能有误。我将使用我在代码中使用的字典来更新答案。
    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2011-07-06
    • 1970-01-01
    • 2014-09-12
    相关资源
    最近更新 更多