我正在使用Facebook Connect for iPhone并遵循official instructions。我使用以下代码显示登录对话框:
FBLoginDialog* dialog = [[[FBLoginDialog alloc] initWithSession:session] autorelease];
[dialog show];
(请注意,当我使用FBLoginButton方法而不是直接显示对话框时,结果是相同的。)
对话框会按预期弹出,但正如您在下面的屏幕截图中看到的那样,它太大了,看起来像完整的Facebook主页。我可以平移对话框以显示登录按钮,但是一旦我登录它继续显示对话框内的常规Facebook页面。它从不调用我的session:didLogin
回调。
我有什么问题吗?
alt text http://img.skitch.com/20091115-t24w7p5gpa6iqgehjdc4f1awfs.jpg
答案 0 :(得分:5)
我终于想通了......我正在初始化我的app delegate的FBSession
方法中的applicationDidFinishLaunching
。然后我在视图控制器viewDidAppear
中触发了Facebook登录代码。
然而,applicationDidFinishLaunching
看起来像这样:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:viewController.view];
[window makeKeyAndVisible];
self.session = [FBSession sessionForApplication:FB_API_KEY secret:FB_APP_SECRET delegate:self];
}
这意味着我在初始化FBSession
之前显示窗口,显然nil会话导致我上面描述的行为。更改applicationDidFinishLaunching
以首先创建FBSession
后,现在所有内容都按预期工作。 Doh ......;)
答案 1 :(得分:1)
感谢Mirko,我遇到了完全相同的问题但通过不同的实现达成了问题。以下是事实:
答案 2 :(得分:0)
我没有使用过FaceBook API库,但您在发送dialog.frame
消息之前是否尝试更改show
?
答案 3 :(得分:0)
您是否在设备上试过这个?你在构建什么操作系统?我正在使用几乎相同的调用而没有问题(-init,vs。initWithSession)。另外,我假设你已经设置了一个窗口和视图架构,这是正确的吗?
答案 4 :(得分:0)
我只有这个问题,只有设备,不在模拟器上。显然,Facebook页面正在使用设备的用户代理来呈现正确的页面。如果您愿意,您应该可以通过向FB Connect的Web视图正在进行的http调用添加用户代理标题来更改它。
答案 5 :(得分:0)
我刚拿起我的代码,看到我为同样的问题写了一个解决方法。基本上问题是Facebook连接要求你在你的应用程序中放置一个FBLoginButton,然后打开登录对话框。为了显示没有按钮的对话框,我这样做了:
faceBookSession = [FBSession sessionForApplication:kFacebookAPIKey secret:kFaceBookAPISeceret delegate:self];
if (![faceBookSession resume]) {
FBLoginButton *button = [[FBLoginButton alloc] init];
[button performSelector:@selector(touchUpInside)];
[button release];
}