有幾件事。
- 您只需要在整個應用程序一個點來實現fbDidLogin。您不會在使用Facebook的每個視圖控制器上實現它。
- 假設您是從Facebook的iOS文檔的入門步驟,你的Facebook對象的生活爲您的應用程序委託的屬性。而您的應用程序委託中您的fbDidLogin方法僅爲。這也應該是您的代碼中聲明Facebook變量的唯一位置。這意味着,只要你從代碼中的其他任何地方訪問Facebook,你做這樣的事情:
ProjectNameAppDelegate *appDelegate = (ProjectNameAppDelegate *)[UIApplication sharedApplication].delegate;
[appDelegate.facebook someMethod];
在您的應用程序委託 - 您handleOpenURL和的OpenURL方法應該看起來就像從Facebook的樣例文檔中,而不是像您發佈的代碼。
-Personally我更喜歡移動的Facebook的對象從應用程序委託的成單輔助類,但如果你是一個初學者,那麼這是可能比你需要更先進。
最新信息答疑評論:
-someMethod無論是Facebook的方法,你正在尋找調用(後牆上,認證,等等)
- 你應該把所有FBSessionDelegate方法在應用程序委託
- 您需要實現您的視圖控制器上FBDialogDelegate您發佈至Facebook
- 然後在您的視圖控制器,當你想要發佈到用戶的牆上做一些升IKE在此:
- (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」無論何時登錄完成(成功或失敗)。
- 注意:我寫了上面的代碼無需編譯它或測試,以便它可能不是完美的(但通常是:)
- 請注意:您不能發佈到用戶的牆的情況下直接將dailog被彈出。用戶總是能夠在發佈帖子之前編輯帖子。
Facebook會話在哪裏實施?在應用程序代表? –