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

时间:2011-04-05 13:23:46

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

我想使用ios-sdk

在Facebook上传视频

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

我尝试使用您的代码,但没有成功

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

  4. 然后我为上传视频编码如下
  5. 这是代码

    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>
    

    Amit Battan

2 个答案:

答案 0 :(得分:3)

隐私字典条目格式已更改:

  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/

但这并不能解决视频没有出现在“我的视频”中,甚至不允许我的朋友看到​​它,如果他们有直接链接。视频页面上的“分享”按钮也被破坏了,所以我甚至无法将它发布到我的墙上。

答案 1 :(得分:1)

请参阅FBVideoUpload.h中的评论:

  

请注意,此代码解析了   来自的访问令牌       Facebook类,非常脆弱,非官方和       可能很容易打破即将推出的SDK版本。还有       似乎只适用于较旧的弹出式身份验证和       不是使用app切换的新的。 (新的身份验证       scheme似乎导致了不同的身份验证令牌格式       我们无法解析。)

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


至于要通过上传传递的字典,以下是我的代码的外观:

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];

这适合我。