2011-05-27 34 views
1

您好我使用最新的Facebook的API與SSO和國家執行類似(在本例中沒有在的appDelegate一樣,如果有什麼差別)在我的viewController如下:在我的.h文件中 Facebook的isSessionValid總是NO

Facebook *facebook; 
@property (nonatomic,retain) Facebook *facebook; 
在我的.m文件

我做的,我viewDidLoad中

self.facebook = [[Facebook alloc] initWithAppId:@"myappID"]; 

按照另一種方法,我做

if (![facebook isSessionValid]) { 


NSArray *permissions = [[NSArray arrayWithObjects:@"publish_stream",nil] retain]; 
[facebook authorize:permissions delegate:self]; 
} 

但似乎isSessionValid常是NO ,我不知道爲什麼! 有沒有人知道爲什麼? 哦,還expirationDate和accessTokken是零

回答

4

好的,這裏是我的問題的答案。 正如我在評論中還說的應用程序:handleOpenURL:永遠不會被調用! 因爲我有我的ViewController這個方法,顯然它必須在appDelegate!

所以在我的導航欄基於應用程序,我做了我的appDelegate如下:

ViewController *viewController; 
@property (nonatomic, retain) IBOutlet ViewController *viewController; 
在.m文件

@synthesize viewController; 

viewController = [[ViewController alloc]init]; 
[self.navigationController pushViewController:viewController animated:NO]; 

然後

在.h文件

實現這樣的方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 

return [viewController.facebook handleOpenURL:url]; 
} 

,當然在我的ViewController的我所做的一切@Tyler提到的(感謝你) ,一切工作就像一個魅力。 希望這可以幫助每個人都有同樣的問題。

4

我昨天有這個完全相同的問題,看來你必須堅持和恢復訪問令牌/到期日期自己。

在您的viewDidLoad:

// Restore previously saved Facebook credentials (If any) 
facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"FBAccessToken"]; 
facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"FBExpirationDate"]; 

// Trigger SSO Facebook authentication if required 
if ([facebook isSessionValid] == NO) { 
    [facebook authorize:nil delegate:self]; 
} else { 
    [self fbDidLogin]; 
} 

然後在fbDidLogin委託:

- (void)fbDidLogin 

{ //保存用戶訪問令牌和到期日,所以我們以後可以將其還原 //這我們可以避免不必要的對Facebook進行身份驗證。

[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"]; 
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"]; 

// User has logged in to Facebook, now get their userId from Facebook 
[facebook requestWithGraphPath:@"me" andDelegate:self]; 

}

所以現在用戶必須登錄/授權應用程序一次,從那時起,直到他們退出Facebook的自己的會議將繼續有效。

+0

感謝您的提示。聽起來很合理。但它也似乎我的 - (無效)fbDidLogin永遠不會被召喚出於任何原因!我沒有在我的appdelegate中實現所有這些,而是​​在我的mainViewController中實現了這個問題? – bllubbor 2011-05-27 21:36:14

+0

如果SSO未重定向到您的應用程序並調用fbDidLogin委託,則您的聲音沒有正確設置URLScheme。查看http://developers.facebook.com/docs/guides/mobile/「iOS for iPhone/iPad」部分。 – Tyler 2011-05-27 21:43:31

+0

我是用這個文件做的。我已經確定了。看起來完全一樣,除了我有一個URL標識符,但示例應用程序完全像我一樣。 – bllubbor 2011-05-27 21:56:08

相關問題