无论如何,iOS6.0中的Facebook使用SLRequest上传照片失败

时间:2012-11-05 17:01:17

标签: objective-c facebook ios6

这是我的Objc代码:

ACAccountStore *facebookaccount = [[ACAccountStore alloc] init];
ACAccountType *facebookaccountType = [facebookaccount accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierFacebook];
// Specify App ID and permissions
NSDictionary *options = @{ ACFacebookAppIdKey: @"1234567899876543", ACFacebookPermissionsKey: @[@"publish_stream"], ACFacebookAudienceKey: ACFacebookAudienceFriends };
[facebookaccount requestAccessToAccountsWithType:facebookaccountType options:options completion:^(BOOL granted, NSError *error) {
    if(granted) {
        NSArray *accountsArray = [facebookaccount accountsWithAccountType:facebookaccountType];
        if ([accountsArray count] > 0) {
            ACAccount *facebookAccount = [accountsArray objectAtIndex:0];

            NSString *sendmessage = @"Face";
            NSData *myImageData = UIImagePNGRepresentation(imageSource);

            SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"] parameters:nil];

            [facebookRequest addMultipartData:myImageData withName:@"source" type:@"multipart/form-data" filename:nil];
            [facebookRequest addMultipartData:[sendmessage dataUsingEncoding:NSUTF8StringEncoding] withName:@"message" type:@"multipart/form-data" filename:nil];

            [facebookRequest setAccount:facebookAccount];

            [facebookRequest performRequestWithHandler:^(NSData* responseData, NSHTTPURLResponse* urlResponse, NSError* error) {
                if (error == nil) {
                    NSLog(@"responedata:%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
                }else{
                    NSLog(@"%@",error.description);
                }
        }
    }
    else
    {
        NSLog(@"error description : %@",[NSString stringWithFormat:@"%@", error.localizedDescription]);
    }
}];

最后我得到了这些反复数据:

responedata:{“error”:{“message”:“(#324)需要上传文件”,“类型”:“OAuthException”,“code”:324}}

请帮帮我!!!

1 个答案:

答案 0 :(得分:24)

我可以通过在addMultipartData中包含文件名并将消息作为SLRequest选项的一部分传递来成功上传照片。

代码:

NSDictionary *parameters = @{@"message": sendmessage};

SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                            requestMethod:SLRequestMethodPOST
                                                      URL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"]
                                                           parameters:parameters];

[facebookRequest addMultipartData: myImageData
                                     withName:@"source"
                                         type:@"multipart/form-data"
                                     filename:@"TestImage"];

facebookRequest.account = facebookAccount;

[facebookRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error)
{
     // Log the result
}];