IOS - 未调用 Facebook SDK fbDidLogin - 初始化视图控制器。

Posted

技术标签:

【中文标题】IOS - 未调用 Facebook SDK fbDidLogin - 初始化视图控制器。【英文标题】:IOS - Facebook SDK fbDidLogin not called -- initialize view controllers. 【发布时间】:2012-08-19 05:32:26 【问题描述】:

我一步步按照 Facebook 的 Facebook SDK 教程进行操作。除了调用 fbDidLogin 之外,我的所有工作都正常......授权过程运行良好。我被告知要这样做:

     - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
          return [[controller facebook] handleOpenURL:url];
     

来自fbDidLogin not called

问题是我不确定如何分配初始化我的视图控制器。这是我的 .h 应用程序委托:

#import <UIKit/UIKit.h>
#import "FBConnect.h"


@interface fb2AppDelegate : UIResponder  <UIApplicationDelegate, FBSessionDelegate> 

    Facebook *facebook; 
    UIViewController *fb2ViewController;


@property (strong, nonatomic) UIWindow *window;
@property (strong,nonatomic) Facebook *facebook; 
@property (nonatomic, strong) UIViewController *fb2ViewController;

@end

和 .m :

#import "fb2AppDelegate.h"

@implementation fb2AppDelegate
@synthesize window = _window;
@synthesize facebook;
@synthesize fb2ViewController;


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


    self.fb2ViewController = [[UIViewController alloc] init];

    facebook = [[Facebook alloc] initWithAppId:@"key_here" andDelegate:self];


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

    if (![facebook isSessionValid]) 
        [facebook authorize:nil];
     


    return YES;



- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
    return [[fb2ViewController facebook] handleOpenURL:url];



- (void)fbDidLogin 

    NSLog(@"fbdidlogin"); 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"key_here", @"app_id",
                                   @"http://developers.facebook.com/docs/reference/dialogs/", @"link",
                                   @"http://fbrell.com/f8.jpg", @"picture",
                                   @"Facebook Dialogs", @"name",
                                   @"Reference Documentation", @"caption",
                                   @"Using Dialogs to interact with users.", @"description",
                                   nil];

    [facebook dialog:@"feed" andParams:params andDelegate:self];


至于视图控制器...我没有在其中添加任何代码。

我收到的错误是:

“UIViewController”没有可见的@interface 声明选择器“Facebook”

我做错了什么?

谢谢!

【问题讨论】:

第二个版本的实现是什么意思? iphone SSO Facebook implementation的可能重复 @user1392515 你需要做:[facebook handleOpenURL:url]。您当前使用 facebook 作为选择器而不是对象。 @user1392515 facebook.sessionDelegate = self; @AlexanderNorway;提出答案,我会投票。您应该在这里获得一半的功劳。 【参考方案1】:

好的,你需要做的:

[facebook handleOpenURL:url]. 

您当前使用facebook 作为选择器而不是对象。

另外..你需要设置facebook.sessionDelegate = self,这样代理方法fbDidLogin才能被调用。

希望这会有所帮助!

【讨论】:

@user1392515 感谢您给我正确的答案。我真的没想到你会说实话。我只是想在我 100% 确定它可以解决您的问题之前避免回答,因为它可能会阻止其他人在您的问题已经得到回答时阅读。 @CodaFi 你也一样 :) 好吧@AlexanderNorway,反正我并不需要代表;) @CodaFi 是的,你的代表疯了 ^^ 呵呵。不过还是谢谢:)【参考方案2】:

问题在于运行时认为您的 UIViewController 具有类方法 +facebook,而实际上,这是使用其他问题的答案的示例单例(我可能会添加混淆)。您需要将其发送到 Facebook object 的实例并从那里调用您的代码。

 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
      return [facebook handleOpenURL:url];
 

还要记住,为了调用委托方法,您的对象实际上必须是委托。所以设置facebook.sessionDelegate = self 并使用&lt;FBSessionDelegate&gt; 符合标头中的协议以使编译器警告静音。

【讨论】:

感谢您的回答!首先尝试了,但什么也没发生……我的意思是这对我来说当然有意义……但是 fbDidLogin 永远不会被调用…… 当然不是,傻瓜。你不是这个东西的sessionDelegate 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊– AlexanderNorway 1 分钟前

以上是关于IOS - 未调用 Facebook SDK fbDidLogin - 初始化视图控制器。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用iOS SDK在FB中获取用户的所有朋友

Facebook JS Sdk - FB.getLoginStatus = 未定义

用户更改密码后 Facebook iOS SDK 不会打开登录 UI (iOS 6)

FB ios SDK 3.13.1 操作无法完成(com.facebook.sdk 错误2)

调用 facebook ios sdk 的注销功能未清除用户凭据

通过 FB SDK for iOS 将视频分享到 facebook