Facebook api ios-sdk,代表不工作,没有调用 fbDidLogin

Posted

技术标签:

【中文标题】Facebook api ios-sdk,代表不工作,没有调用 fbDidLogin【英文标题】:Facebook api ios-sdk, delegates not working, fbDidLogin not called 【发布时间】:2011-03-17 01:13:44 【问题描述】:

我对最新的 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]; 

有什么建议吗??

谢谢!

【问题讨论】:

你知道为什么会这样吗?我有同样的问题。没有调用 fbDidLogin 方法 删除了我的答案 - 你的 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 方法被调用了吗?断点。 这个方法在我这边同样的情况没有调用 我在这里找到了解决方案:http://***.com/questions/5783782/fbdidlogin-not-called-ios 打开 facebook.m 文件并找到以下行: [self authorizeWithFBAppAuth:YES safariAuth:YES];并将其更改为 [self authorizeWithFBAppAuth:NO safariAuth:NO]; 【参考方案1】:

我刚遇到这个问题,相信我可能已经找到了您的解决方案。当您在 facebook 上创建应用程序时,您必须编辑您的应用程序设置以允许原生 ios 应用程序。所选的 ios 捆绑包 ID 必须与您正在创建的应用程序中的捆绑包 ID 完全匹配。 Facebook 声明他们会在授权您的应用程序之前检查这一点。有趣的是,如果您从设备中删除 facebook 应用程序,然后尝试使用 Web 浏览器对其进行身份验证,并且似乎完全绕过了这种“安全性”。 Facebook 不会发回错误消息,因此追踪起来很有趣。我想我会把这个答案放在那里,希望能为一些未来的开发者省去一些麻烦。我希望这会有所帮助。

【讨论】:

谢谢 - 这真的帮助了我!一个大写字母花了我 2 天的时间,如果不是你的回答,我会花更多的钱。 很高兴我也能帮我花几天时间。【参考方案2】:

我遇到了同样的问题。对我来说,这是通过取消选中 Info plist 中的“应用程序不在后台运行”属性来解决的。

【讨论】:

【参考方案3】:

我有同样的问题。我没有设置 facebook 访问权限。我多写了一行代码

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

它运行良好。

【讨论】:

以上是关于Facebook api ios-sdk,代表不工作,没有调用 fbDidLogin的主要内容,如果未能解决你的问题,请参考以下文章

Facebook ios-sdk:提要帖子不显示在新闻提要上

多个 ios 应用程序共享一个 facebook 应用程序

Facebook iOS 上传视频“无法从访问令牌中检索会话密钥。”

Facebook:可以使用图形 API 设置事件的描述和图像吗?

Facebook Connect:“<app> 发生错误,请稍后再试”

重剑无锋,大巧不工