从未调用fbDidLogin(facebook ios sdk)

从未调用fbDidLogin(facebook ios sdk),ios,facebook,facebook-ios-sdk,Ios,Facebook,Facebook Ios Sdk,我正在使用一个弹出的Facebook对话框进行用户登录,并在他/她的流上发布帖子 NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: apiKey, @"api_key", nil]; [facebook dialog:@"stream.publish" andParams:params andDelegate:self]; 它可以工作,但是当用户登录fbDidLogin时,永远不会调

我正在使用一个弹出的Facebook对话框进行用户登录,并在他/她的流上发布帖子

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: apiKey, @"api_key", nil];
[facebook dialog:@"stream.publish" andParams:params andDelegate:self];
它可以工作,但是当用户登录fbDidLogin时,永远不会调用该方法。 为什么? 这样我就不能请求用户名,访问令牌总是空的

编辑


通过10月份的facebook api,我已经部分解决了我的问题。

您是否注册了应用程序来处理您的facebook应用程序id URL?如果没有,则在Facebook iOS SDK网站上有相关说明。您还需要告诉您的应用程序代理处理对此URL的调用。为此,请将以下代码添加到应用程序委派实现中:

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

其中,[controller facebook]是您的facebook类的实例。

您是否注册了应用程序来处理您的facebook应用程序id URL?如果没有,则在Facebook iOS SDK网站上有相关说明。您还需要告诉您的应用程序代理处理对此URL的调用。为此,请将以下代码添加到应用程序委派实现中:

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

其中,[controller facebook]是您的facebook类的实例。

当您按照示例应用程序中的步骤进入自定义应用程序时,将controller类设置为singleton,然后它就可以工作了

大多数开发人员使用alloc和init 2实例,因此从不调用委托fbDidlogin


希望这有帮助。

当您按照示例应用程序中的步骤进入自定义应用程序时,将控制器类设置为singleton,然后它就可以工作了

大多数开发人员使用alloc和init 2实例,因此从不调用委托fbDidlogin


希望这有帮助。

在调用任何对话框方法之前,您需要设置facebook句柄的sessionDelegate成员变量

    self.facebook.sessionDelegate = self;
此外,还需要在对象中实现FBSessionDelegate回调

我没有检查stream.publish,但这是为什么

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

是必需的。

在调用任何对话框方法之前,需要设置facebook句柄的sessionDelegate成员变量

    self.facebook.sessionDelegate = self;
此外,还需要在对象中实现FBSessionDelegate回调

我没有检查stream.publish,但这是为什么

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

是必要的。

迈克·布雷茨的方法对我很有效

我有一个类(视图控制器),它有一个按钮,可以执行以下操作:

NSMutableDictionary * params = [NSMutableDictionary dictionary];
[params setObject:FACEBOOK_APP_ID forKey:@"client_id"];
[[SHARED_APP facebook] setSessionDelegate:self];
[[SHARED_APP facebook] dialog:@"oauth" andParams:params andDelegate:self];
其中,我的控制器也符合协议FBSessionDelegate
,共享应用程序是我的[[UIApplication sharedApplication]委托]

我实现了这个方法

-(void)fbDidLogin {
    NSLog(@"fbDidLogin");
}
成功了

然后我可以对如下方法进行后续调用

[[SHARED_APP facebook] requestWithGraphPath:@"me/friends" andDelegate:self];
检索JSON数据(使用FBRequestDelegate) 对于每个请求,都要小心测试返回值,如此处所述 继续寻找你的身份


希望对我有所帮助

迈克·布雷茨的方法对我有效

我有一个类(视图控制器),它有一个按钮,可以执行以下操作:

NSMutableDictionary * params = [NSMutableDictionary dictionary];
[params setObject:FACEBOOK_APP_ID forKey:@"client_id"];
[[SHARED_APP facebook] setSessionDelegate:self];
[[SHARED_APP facebook] dialog:@"oauth" andParams:params andDelegate:self];
其中,我的控制器也符合协议FBSessionDelegate
,共享应用程序是我的[[UIApplication sharedApplication]委托]

我实现了这个方法

-(void)fbDidLogin {
    NSLog(@"fbDidLogin");
}
成功了

然后我可以对如下方法进行后续调用

[[SHARED_APP facebook] requestWithGraphPath:@"me/friends" andDelegate:self];
检索JSON数据(使用FBRequestDelegate) 对于每个请求,都要小心测试返回值,如此处所述 继续寻找你的身份


希望有帮助

登录成功后,Facebook对象正在调用fbDidLogin,因此请记住分配seesionDeletegate:

  facebook = [[Facebook alloc] initWithAppId:kFacebookApiKey];
  facebook.sessionDelegate = self;

登录成功后,Facebook对象将调用fbDidLogin,因此请记住分配seesionDeletegate:

  facebook = [[Facebook alloc] initWithAppId:kFacebookApiKey];
  facebook.sessionDelegate = self;

我只是遇到了同样的问题并解决了它。你需要实施

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

在应用程序委派类中,而不是自定义UIViewController或任何其他类中。然后将你的应用程序代表的电话转接到负责你Facebook的任何控制器。

我刚刚遇到了同样的问题,并解决了它。你需要实施

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

在应用程序委派类中,而不是自定义UIViewController或任何其他类中。然后将你的应用程序代表的电话转接到负责你Facebook的任何控制器。

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

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

在我的例子中,由于info.plist中的错误,没有调用fbDidLogin。
应将URL方案添加到URL类型中。在这里,fbMyAppId字符串作为项0添加。(我错误地添加了URL标识符而不是URL方案)

在我的例子中,由于info.plist中的错误,没有调用fbdilogin。 应将URL方案添加到URL