Facebook sdk发布在iPhone应用程序的墙上

我在iPhone应用程序中在墙上实现Facebook发布时遇到问题。 我安装SDK和链接框架登录工作正常。 这是代码:

-(IBAction)loginButtonPressed:(id)sender { NSLog(@"loginButtonPressed: called"); AppDelegate *appdel=[[UIApplication sharedApplication] delegate]; appdel.facebookSession=[[FBSession alloc] init]; [appdel.facebookSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) { // }]; } 

但是我在用户的墙上发布消息时遇到了问题。 这是代码:

 -(IBAction)likeButtonPressed:(id)sender { NSLog(@"likeButtonPressed: called"); // Post a status update to the user's feedm via the Graph API, and display an alert view // with the results or an error. NSString *message = @"test message"; NSDictionary *params = [NSDictionary dictionaryWithObject:message forKey:@"message"]; // use the "startWith" helper static on FBRequest to both create and start a request, with // a specified completion handler. [FBRequest startWithGraphPath:@"me/feed" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { [self showAlert:message result:result error:error]; }]; } 

请帮帮我。 我的代码出了什么问题? 或者我应该为登录请求添加一些权限?

这段代码对我有用。 首先我们必须

 #import  

然后

 @property (strong, nonatomic) FBRequestConnection *requestConnection; 

当然不要忘记合成:

 @synthesize requestConnection; 

代码本身:

 -(IBAction)likeButtonPressed:(id)sender { NSLog(@"likeButtonPressed: called"); // FBSample logic // Check to see whether we have already opened a session. if (FBSession.activeSession.isOpen) { // login is integrated with the send button -- so if open, we send [self postOnWall]; } else { [FBSession sessionOpenWithPermissions:[NSArray arrayWithObjects:@"publish_stream", nil] completionHandler: ^(FBSession *session, FBSessionState status, NSError *error) { // if login fails for any reason, we alert if (error) { NSLog(@" login failed"); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; // if otherwise we check to see if the session is open, an alternative to // to the FB_ISSESSIONOPENWITHSTATE helper-macro would be to check the isOpen // property of the session object; the macros are useful, however, for more // detailed state checking for FBSession objects } else if (FB_ISSESSIONOPENWITHSTATE(status)) { NSLog(@" sending post on wall request..."); // send our requests if we successfully logged in [self postOnWall]; } }]; }; } - (void)postOnWall { NSNumber *testMessageIndex=[[NSNumber alloc] init]; if ([[NSUserDefaults standardUserDefaults] objectForKey:@"testMessageIndex"]==nil) { testMessageIndex=[NSNumber numberWithInt:100]; } else { testMessageIndex=[[NSUserDefaults standardUserDefaults] objectForKey:@"testMessageIndex"]; }; testMessageIndex=[NSNumber numberWithInt:[testMessageIndex intValue]+1]; [[NSUserDefaults standardUserDefaults] setObject:testMessageIndex forKey:@"testMessageIndex"]; [[NSUserDefaults standardUserDefaults] synchronize]; // create the connection object FBRequestConnection *newConnection = [[FBRequestConnection alloc] init]; // create a handler block to handle the results of the request for fbid's profile FBRequestHandler handler = ^(FBRequestConnection *connection, id result, NSError *error) { // output the results of the request [self requestCompleted:connection forFbID:@"me" result:result error:error]; }; // create the request object, using the fbid as the graph path // as an alternative the request* static methods of the FBRequest class could // be used to fetch common requests, such as /me and /me/friends NSString *messageString=[NSString stringWithFormat:@"wk test message %i", [testMessageIndex intValue]]; FBRequest *request=[[FBRequest alloc] initWithSession:FBSession.activeSession graphPath:@"me/feed" parameters:[NSDictionary dictionaryWithObject:messageString forKey:@"message"] HTTPMethod:@"POST"]; // add the request to the connection object, if more than one request is added // the connection object will compose the requests as a batch request; whether or // not the request is a batch or a singleton, the handler behavior is the same, // allowing the application to be dynamic in regards to whether a single or multiple // requests are occuring [newConnection addRequest:request completionHandler:handler]; // if there's an outstanding connection, just cancel [self.requestConnection cancel]; // keep track of our connection, and start it self.requestConnection = newConnection; [newConnection start]; } // FBSample logic // Report any results. Invoked once for each request we make. - (void)requestCompleted:(FBRequestConnection *)connection forFbID:fbID result:(id)result error:(NSError *)error { NSLog(@"request completed"); // not the completion we were looking for... if (self.requestConnection && connection != self.requestConnection) { NSLog(@" not the completion we are looking for"); return; } // clean this up, for posterity self.requestConnection = nil; if (error) { NSLog(@" error"); UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; // error contains details about why the request failed [alert show]; } else { NSLog(@" ok"); }; } 

试试这段代码

  NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; NSArray* facebookCookies = [cookies cookiesForURL: [NSURL URLWithString:@"http://login.facebook.com"]]; for (NSHTTPCookie* cookie in facebookCookies) { [cookies deleteCookie:cookie]; } NSString *FBBody = [NSString stringWithFormat:@"your message you want to post"]; UIImage *img=[UIImage imageNamed:[NSString stringWithFormat:image naemif you want to post]]; FBFeedPost *post = [[FBFeedPost alloc] initWithPhoto:img name:FBBody]; [post publishPostWithDelegate:self]; [[UIAppDelegate indicator] startAnimating]; IFNNotificationDisplay *display = [[IFNNotificationDisplay alloc] init]; display.type = NotificationDisplayTypeLoading; display.tag = NOTIFICATION_DISPLAY_TAG; 

你应该设置权限:“status_update”。

喜欢这个 :

 FBLoginView *loginview = [[FBLoginView alloc] initWithPermissions:[NSArray arrayWithObject:@"status_update"]]; 

要么

 FBSession *fbSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObject:@"status_update"]];