2012-11-05 34 views
7

這裏來我Objc代碼:Facebook在iOS6.0使用SLRequest上傳反正照片失敗

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:{ 「錯誤」:{「消息「:」(#324)需要上傳文件「,」type「:」OAuthException「,」code「:324}}

請幫幫我!!!

回答

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 
}]; 
+0

謝謝你這麼多。我一直在尋找相同的東西,但內置Twitter iOS框架。確實非常有幫助:) – Supertecnoboff

+0

謝謝兄弟!缺少添加文件名與多部分.. – Nikunj

+0

嗨@MitchM你知道一種方式分享多個圖像與這種相同的邏輯使用'SLRequest'? – jose920405