2

我正在使用 iOS 6 中的社交框架将 facebook 视频上传集成到我的应用程序中。但是,当我运行程序时没有任何反应,而是收到以下错误:

操作无法完成。(com.apple.accounts 错误 6。)

"必须使用活动访问令牌来查询有关当前用户的信息。","type":"OAuthException","code":2500}}"

下面是我的代码,前半部分是我从本教程中实现的。granted设置为false,导致第一个错误。

- (void)uploadToFb {

    ACAccountStore *accountStore = [[ACAccountStore alloc] init];

    ACAccountType *facebookAccountType = [accountStore
                                          accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

    // Specify App ID and permissions
    NSDictionary *options = @{
                               ACFacebookAppIdKey: @"2************",
                               ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"],
                               ACFacebookAudienceKey: ACFacebookAudienceFriends
    };

    [accountStore requestAccessToAccountsWithType:facebookAccountType
                                          options:options completion:^(BOOL granted, NSError *e) {

          if (granted) 
          {
              NSArray *accounts = [accountStore accountsWithAccountType:facebookAccountType];
              facebookAccount = [accounts lastObject];
          }
          else
          { 
           NSLog(@"Error %@", e.localizedDescription);                                              }

          }
    }];

    NSURL *videourl = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];

    NSString *filePath = [outputURL path];
    NSURL *pathURL = outputURL;
    NSData *videoData = [NSData dataWithContentsOfFile:filePath];

    NSDictionary *params = @{
    @"title": @"Face Puppets Video",
    @"description": @"A funny video I made with the #FacePuppets iOS app."
    };

    SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                                  requestMethod:SLRequestMethodPOST
                                                            URL:videourl
                                                     parameters:params];
    [uploadRequest addMultipartData:videoData
                           withName:@"source"
                               type:@"video/quicktime"
                           filename:[pathURL absoluteString]];

    uploadRequest.account = facebookAccount;

    [uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        if(error){
            NSLog(@"Error %@", error.localizedDescription);
        }else
            NSLog(@"%@", responseString);
    }];
}
4

3 回答 3

1

嗨,这是一个非常好的共享示例iOS (Wiki)(iOS 示例项目,~3 MB)使用它您可以将视频分享到Facebook、YouTube、Flicker、Vimeo查看上面的链接并测试此示例。

您需要将 You 设置AppIdESSViewController.mclass 在此方法中:

- (IBAction)facebook:(id)sender
{
    self.fb = [[[ESSFacebook alloc] initWithDelegate:self
                                               appID:@"youAppID"
                                           appSecret:@"secret"] autorelease];
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"IMG_1203" withExtension:@"MOV"];
    [self.fb uploadVideoAtURL:url];
}

可能这是 Facebook 的旧版本,但用于获取有关如何处理来自 ourApp 的共享视频的想法。

于 2013-09-13T05:59:27.370 回答
0

之后的所有代码NSURL *videourl都应移至另一种方法。目前,它正在requestAccessToAccountsWithType:请求进行时执行,因此该facebookAccount引用尚不可用。因此,如果为真,则应从completion块中调用您创建并将该代码移动到的新方法。granted

请注意,您不能立即请求发布权限。您必须先请求读取权限,然后在授予权限后请求发布权限。

于 2013-09-09T14:58:53.830 回答
0

问题似乎与您的 NSDictionary 创建有关。

   NSDictionary *options = @{
                           ACFacebookAppIdKey: @"2************",
                           ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"],
                           ACFacebookAudienceKey: ACFacebookAudienceFriends
   };

您会看到您首先传递键,然后传递对象,在这种情况下,NSDictionary 调用 +dictionaryWithObjectsAndKeys ......

尝试使用正确的格式,例如:

NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
                         @"###############", ACFacebookAppIdKey, 
                         [NSArray arrayWithObject:@"publish_stream"], ACFacebookPermissionsKey, 
                         nil];

这应该有效。

在这里看到同样的问题: Getting "Error Code 8" When Calling [ACAccountStore requestAccessToAccountsWithType] - iOS Facebook

于 2013-09-11T17:10:59.937 回答