2011-03-17 61 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];

其完美的工作一个额外的行。