Facebook iOS Upload Video “Unable to retrieve sess

2020-02-13 04:44发布

问题:

I want to upload video on facebook using ios-sdk

I check discussion in question iPhone Facebook Video Upload and try to implement it in my application

I try to your code but not succeed

  1. I download your code https://github.com/zoul/facebook-ios-sdk
  2. take the FBVideoUpload.h/m classes from your src add add into my project
  3. include "FBVideoUpload.h" in FBConnect.h

  4. then I code for upload video as follow

This is Code

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

But got the error in Logs i.e
Unable to retrieve session key from the access token.

which is due to

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

in class FBVideoUpload

For Login I am using this code

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

I am able to fetch my updates from facebook so then session is ok here.
Can you please tell me What wrong I am doing?

EDIT
After changing the login steps suggested by the zoul I am now not getting the sessionID error log.. My request is now sending to the fb server but getting this response

<?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

回答1:

See the comments in FBVideoUpload.h:

Please note that this code parses the access token from the Facebook class, which is quite brittle, unofficial and could easily break with the upcoming SDK releases. Also it seems to only work with the older, pop-up authentication and not the new one that uses app switching. (The new authentication scheme seems to result in a different auth token format that we can’t parse.)

Your problem looks like you are using the modern, app-switching authentication scheme. That results in a different access token and therefore the video uploading hack does not work. Switching to the older authentication scheme is easy, see code in this branch (it adds a forceOldStyleAuth property to the Facebook class).


As for the dictionary to pass with the upload, here’s how my code looks:

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

This works for me.



回答2:

The privacy dictionary entry format changed:

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

The Graph API docs for the Post object talk about the privacy object: http://developers.facebook.com/docs/reference/api/post/

But that doesn't fix the video not showing up in "My Videos" or even allow my friends to see it if they have the direct link. The Share button on the video page is broken too, so I can't even get it posted to my wall that way.