Facebook SSO并请求iOS SDK

我正在尝试向当前用户发布一条墙消息。 在我做请求之前,我正在validation会话并授权它是否存在。 自从澄清以来,我遗漏了一些声明和变量的初始化。 问题是这里显示的代码是在执行fbDidLogin-delegate方法之前执行的。 因此,Facebook对象在请求之前似乎没有有效的访问令牌。 我做了一个单身人士。 下次我运行程序时它可以工作。

代表

- (void)fbDidLogin { NSLog(@"DEBUG: DID LOG IN"); NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; [defaults synchronize]; } 

视图控制器

 Facebook *facebook = [SocialMedia sharedFacebookAuthorized]; NSString *name = nil; NSString *message = nil; NSString *picture = nil; if (self.didPassTest) { // Code } else { // Code } NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: name, @"name", message, @"message", picture, @"picture", description, @"description", link, @"link", caption, @"caption", nil]; [facebook requestWithGraphPath:@"me/feed" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

SharedFacebook..function

 + (Facebook *)sharedFacebookAuthorized { [self sharedFacebook]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) { facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; } NSArray *permissions = [[NSArray arrayWithObjects:@"email", @"read_stream", @"publish_stream", nil] retain]; NSLog(@"START?"); if (![facebook isSessionValid]) { [facebook authorize:permissions]; NSLog(@"INSIDE?"); } NSLog(@"CONTINUE?"); return facebook; } 

这是一个异步任务。 在从图形API请求任何内容之前,您必须等待授权异步调用完成。 请参阅我在此处对类似问题的回答: 如何对异步事件做出反应(登录)?