几件事。
-您只需要在整个应用程序中的一个位置实现 fbDidLogin。您不会在每个使用 facebook 的视图控制器上实现它。
- 假设您遵循 Facebook 的 iOS 文档中的入门步骤,您的 Facebook 对象作为您的应用程序委托的属性存在。而且您的 fbDidLogin 方法仅在您的应用程序委托中。这也应该是您的代码中声明 Facebook 变量的唯一位置。这意味着每当您从代码中的其他任何地方访问 facebook 时,您都会执行以下操作:
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate.facebook someMethod];
- 您的应用程序委托中的 handleOpenURL 和 openURL 方法应该与 Facebook 的示例文档中的完全一样,而不是您发布的代码。
- 就我个人而言,我更喜欢将 Facebook 对象从应用程序委托中移出到单例助手类中,但如果您是初学者,那么这可能比您需要的更高级。
更新信息回答评论:
-someMethod 是您要调用的任何 Facebook 方法(在墙上发布、验证等)
- 您应该将所有 FBSessionDelegate 方法放在您的应用程序委托中
- 您需要在您发布到 Facebook 的视图控制器上实现 FBDialogDelegate
- 然后在您的视图控制器中,当您想发布到用户的墙上时,请执行以下操作:
- (void)postToWall {
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
if (appDelegate.facebook.isSessionValid) {
//we're logged in so call the post dialog
[self doPost:nil];
} else {
//we're not logged in so call the login and then do the post when it's done
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doPost:) name:@"FBLoginComplete" object:nil];
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"offline_access",
@"publish_stream",
nil];
[appDelegate.facebook authorize:permissions];
[permissions release];
}
}
-(void)doPost:(NSNotification *) notification {
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
if (appDelegate.facebook.isSessionValid) {
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
something, @"app_id",
something, @"link",
something, @"picture",
something, @"name",
something, @"caption",
something, @"description",
nil];
[appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];
[params release];
}
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- 要使上述工作正常进行,您需要在登录完成(成功或失败)时发布 NSNotificationCenter 消息“FBLoginComplete”。
-注意:我在没有编译或测试的情况下编写了上面的代码,因此它可能并不完美(但通常是:)
- 请注意:您不能在没有弹出对话框的情况下直接发布到用户的墙上。用户始终可以在帖子撞墙之前对其进行编辑。