2011-03-17 62 views
4

我有一個最新的iOS SDK的問題。我成功登錄並且應用程序返回,但像fbDidLogin等委託方法不會被調用。Facebook api ios-sdk,代表不工作,fbDidLogin不叫

如果在沒有任何控制器的情況下只在一個代理文件中嘗試完成,並使其工作。但如果我有幾個控制器,它不工作了/

我用我自己寫的類FacebookFetchter來處理Facebook。

//FacebookFetchter.h 
    #import Foundation/Foundation.h> 
    #import "FBConnect.h" 

    @interface FacebookFetchter : NSObject <FBDialogDelegate,FBSessionDelegate,FBRequestDelegate> { 
     Facebook *facebook; 
     FacebookFetchter *facebookFetcher; } 

    @property (nonatomic, retain) IBOutlet UIWindow *window; @property (retain) Facebook *facebook; @property (retain) FacebookFetchter 
*facebookFetcher; @end 


// FacebookFetchter.m 
    #import "FacebookFetchter.h" 

    @implementation FacebookFetchter @synthesize facebookFetcher,facebook; 

    -(void)login{ 
     NSLog(@"facebook login..."); 
     facebook = [[Facebook alloc] initWithAppId:@"..."]; //took the id out 
     NSArray *permissions = [[NSArray arrayWithObjects: 
            @"read_stream", @"offline_access", @"user_photos", @"user_photo_video_tags" , @"friends_photo_video_tags", @"friends_photos",@"friends_about_me",@"user_about_me",@"manage_friendlists",@"read_friendlists",@"user_birthday",@"friends_birthday", nil] retain]; 

     [facebook authorize:permissions delegate:self]; 

    } 

    ... 
    -(void)fbDidLogin { 
     NSLog(@"Erfolgreich eingeloggt...."); } ... 

    @end 

在我委託我實現了這一點,我還設置了與fbapp_id URL方案的plist

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    NSLog(@"AppDelegate handleOpenURL"); 
    return [[[settings facebookFetcher] facebookFetcher] handleOpenURL:url]; 
} 

有設置爲我的視圖控制器:

//settings.h @interface Settings : UIViewController { 
    FacebookFetchter *facebookFetcher; 
    //Facebook *facebook; } 

@property (retain) FacebookFetchter 
*facebookFetcher; 
- (IBAction)sync; @end 

//settings.m @synthesize facebookFetcher; 

//within this action the facebook login is called 
- (IBAction)sync{ 
    NSLog(@"sync..."); 
    facebookFetcher = [[FacebookFetchter alloc] init]; 
    [facebookFetcher login]; } 

有什麼建議?

謝謝!

+0

你發現這是爲什麼發生?我有同樣的問題。 fbDidLogin方法沒有被調用 – Jayshree 2011-03-21 09:09:23

+3

刪除我的答案 - 你的' - (BOOL)應用程序:(UIApplication *)應用程序handleOpenURL:(NSURL *)url'方法被調用?斷點。 – 2011-03-31 20:25:19

+0

這種方法不是在我的身邊叫同樣的情況 – 2011-05-12 13:52:01

回答

1

我遇到了同樣的問題。對我來說,它是通過取消選中Info plist中的「應用程序不在後臺運行」屬性來解決的。

3

我剛剛遇到了這個問題,並且相信我可能找到了您的解決方案。當您在Facebook上創建應用程序時,您必須編輯您的應用程序設置以允許使用本機ios應用程序。所選的ios捆綁包ID必須與您正在創建的應用中的捆綁ID完全匹配。 Facebook表示他們在授權你的應用之前檢查這一點。有趣的是,如果你從設備中刪除Facebook應用程序,然後嘗試使用網絡瀏覽器進行身份驗證,並且看似完全地將這種「安全性」進行了雙重處理。 Facebook不會發送錯誤消息,因此查找起來非常有趣。我想我會把這個答案放在那裏,希望能挽救一些未來的開發者一些麻煩。我希望這有幫助。

+0

謝謝 - 這真的幫助了我!一個大寫字母會耗費我2天的時間,如果不是你的答案,會花費我更多。 – dchakarov 2012-01-25 00:15:48

+0

很高興我能幫助我花上幾天的時間。 – Steve 2012-01-25 01:46:03

1

我有同樣的問題。我沒有設置Facebook訪問的權限。我寫的代碼

NSArray *permissions = [[NSArray arrayWithObjects:@"read_stream",@"offline_access","publish_stream", nil] retain];

其完美的工作一個額外的行。