不再调用 FBLoginView 委托方法

Posted

技术标签:

【中文标题】不再调用 FBLoginView 委托方法【英文标题】:FBLoginView delegate methods not called anymore 【发布时间】:2014-07-17 10:09:59 【问题描述】:

我在我的应用程序中使用FBLoginView(版本 3.xx)根据他们的 Facebook 个人资料自动创建用户帐户,但不再调用 FBLoginViewDelegate 的委托回调。

我的代码如下:

在我的AppDelegatedidFinishLaunchingWithOptions 方法中,我有这一行:

[FBLoginView class];

我有一个名为LoginHandler 的类符合FBLoginViewDelegate 协议并实现了这些方法:

- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView
- (void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView
- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user
- (void)loginView:(FBLoginView *)loginView handleError:(NSError *)error

在我的视图控制器的 viewDidLoad 方法中,我有以下代码:

self.fbLoginView.readPermissions = @[@"public_profile", @"email"];
self.fbLoginView.delegate = [LoginHandler sharedInstance];

我还设置了我的 Info.plist:

FacebookAppID (containing <my-app-id>)
FacebookDisplayName (containing my app name=
CFBundleURLSchemes (containing fb<my-app-id>)

当我按下 Facebook 登录按钮时,它会切换到 Facebook 应用程序,询问权限(仅第一次)并返回到我的应用程序。但是,此时没有调用任何委托方法。这以前可以工作,我确实收到了loginViewShowingLoggedInUserloginViewFetchedUserInfo 的回调,但前段时间它停止工作,我根本无法弄清楚是什么改变破坏了它。 有趣的是,每次我启动应用程序时(在我使用 Facebook 按钮执行任何操作之前)我的 loginViewShowingLoggedOutUser 都会被调用。我不知道这是否与我的问题有关,或者这是否是正常行为。

【问题讨论】:

【参考方案1】:

我找到了答案。我需要在我的应用委托中重写此方法。

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

    // Call FBAppCall's handleOpenURL:sourceApplication to handle Facebook app responses
    BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];

    // You can add your app-specific url handling code here if needed
    return wasHandled;

【讨论】:

我尝试在这个方法中设置一个断点,它根本没有被命中。 好的,我终于想通了。我必须更新我的 plist 设置,以便应用程序在后台运行。男人很坚强。

以上是关于不再调用 FBLoginView 委托方法的主要内容,如果未能解决你的问题,请参考以下文章

Cocos2d 委托回调不起作用

没有从 FBLoginView 调用 loginViewShowingLoggedInUser

C++14 或 C++1z 是不是已经或将不再定义调用委托类成员函数指针?

代表不再被称为 swift

快速实例化 FBLoginView 类

如何从 FBLoginView 获取头像?