2011-08-16 32 views
0
- (id)init { 
if (self == [super init]) { 
    facebook = [[Facebook alloc] initWithAppId:kAppId]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
     && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    if (![facebook isSessionValid]) { 
     permissions = [[NSArray arrayWithObjects: 
         @"read_stream", @"user_birthday", 
         @"publish_stream", nil] retain]; 
     [facebook authorize:permissions delegate:self]; 
    } 

    [self login]; 
} 
return self; 

} 

- (void)login { 
if (![_session isConnected]) { 
    [self postToWall]; 
} 


if (![facebook isSessionValid]) { 
    [facebook authorize:permissions delegate:self]; 
} 
} 

- (void)fbdidLogin { 
[[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]; 
} 

-(void)postToWall 
{ 
SBJSON *jsonWriter = [[SBJSON new] autorelease]; 

NSDictionary *actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys: 
                 @"Always Running",@"text",@"http://itsti.me/",@"href", nil], nil]; 

NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks]; 
NSDictionary *attachment = [NSDictionary dictionaryWithObjectsAndKeys: 
          @"Your Happiness!", @"name", 
          @"asda", @"caption", 
          @"asdf", @"description", 
          nil]; 
NSString *attachmentStr = [jsonWriter stringWithObject:attachment]; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
           @"Share on Facebook", @"user_message_prompt", 
           actionLinksStr, @"action_links", 
           attachmentStr, @"attachment", 
           nil]; 


[facebook dialog:@"stream.publish" andParams:params andDelegate:self]; 

} 

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

return [facebook handleOpenURL:url]; 
} 

這是我調用facebook對話框的方法,但每次點擊進行發佈評分時,權限框都會先出現。我需要在發佈對話框出現後給予權限。我想給予權限並且我希望它能夠保存;保存後我不想再次看到權限框。我該怎麼做?我的代碼有什麼問題?爲什麼fbdidlogin沒有打電話?

編輯: 我的訪問令牌和過期日期爲空我猜這是因爲這個。

回答

1

有幾件事要檢查,你調用方法登錄處理方法「fbdidLogin」而不是fbDidLogin。這是區分大小寫的。

確保在您的視圖控制器頭文件中添加了FBSessionDelegate作爲您支持的協議之一。這可能是fbDidLogin未被調用的原因。你總是可以添加一個NSLog來驗證是否已達到fbDidLogin方法。

+0

我用nslog檢查fbDidlogin,並且檢查FBSession委託是否包含。如果你想我也可以發佈頭文件。 –

+0

當然,繼續併發布頭文件並重新發布最新的實現文件。 –

+0

我處理我刪除所有並重新寫入可能在舊的一個失蹤的東西 –

0

您需要實施Facebook的單點登錄功能。

http://developers.facebook.com/docs/guides/mobile/#ios

此鏈接有一步一步的指導,爲實現SSO,如果你遵循仔細你的應用程序會爲允許請求一次,那麼它絕不會再次請求許可(直到用戶刪除您的應用程序)

請注意,您將需要訪問www.facebook.com並使用「開發者工具」創建新的Facebook應用程序,您將成爲該應用程序的管理員,並且您將擁有您的AppID,您也需要這個。

+0

是的,我看着這個頁面,使我的應用程序,但我從另一個viewcontroller而不是在applicationdelegate頁面調用Facebook。 –

+0

我再次檢查,但無法找到我失蹤的原因?還有什麼幫助?請問 –

相關問題