Facebook Connect for iPhone - 想要一步登录和发布

时间:2009-10-16 16:34:02

标签: iphone facebook

这是来自Facebook开发者论坛的转贴,其中没有人回复。

这就是我想做的事情:

  • 用户触摸连接按钮
  • 代码检索会话并尝试恢复
  • 如果会话未恢复,请弹出登录对话框
  • 弹出供稿对话框(用户成功登录后)

在需要登录的情况下实际发生了什么:

  • 用户触摸连接按钮
  • 登录对话框出现(但用户永远不会看到它)
  • 立即出现
  • 提要对话框
  • Feed对话框永远旋转,因为无法连接

似乎没有办法使用委托方法来判断用户是否已完成登录;似乎从未在登录对话框中调用dialogDidSucceed。就此而言,似乎没有办法告诉他们是否取消了(在这种情况下,进入Feed对话框将毫无意义)。

我是否尝试过不可能的事?

3 个答案:

答案 0 :(得分:1)

- (void) login {
  session = [FBSession sessionForApplication:... secret:... delegate:self];
  FBLoginDialog *dialog = [[[FBLoginDialog alloc] initWithSession:session] autorelease];
  dialog.delegate = self;
  [dialog show];
}

- (void) session:(FBSession *)newSession didLogin:(FBUID)newUid {
  session = newSession;
  uid = newUid;

  FBFeedDialog* dialog = [[[FBFeedDialog alloc] init] autorelease];
  dialog.delegate = self;
  dialog.templateBundleId = ...
  dialog.templateData = ...
  [dialog show];
}

答案 1 :(得分:0)

(我正在“回答我自己的问题”,因为这篇文章太长了,无法作为对前一条目的评论而离开)

我认为我没有清楚地解释这个问题......让我再试一次。当用户触摸“在Facebook上分享”按钮时执行以下代码:

// get session
if (session == nil) {
    session = [FBSession sessionForApplication.....];
}
// log in if necessary
if (![session resume]) {
    FBLoginDialog* dialog = [FBLoginDialog alloc...];
    [dialog show];
}
// post feed story
FBFeedDialog* dialog = [FBFeedDialog alloc...];
dialog.delegate = self;
dialog.templateBundleID = ...;
[dialog show];

由于显而易见的原因,这不起作用 - 两个对话框都会立即出现。虽然我看到将它分成两种方法会有所帮助,但主要的问题是我没有任何东西可以触发调出Feed对话框。 dialogDidSucceed似乎没有被调用登录对话框,似乎没有其他我可以寻找的东西。大多数应用将其分为两个按钮,这意味着用户必须触摸第二个按钮才能开始发布Feed故事。我本来希望避免这种情况,但我找不到办法去做。

答案 2 :(得分:0)

虽然Ed's answer is correct,但他没有解释原因。

当您向第一个对话框发送show message时,它会显示,但不会等待它关闭..程序执行会移动到下一行。因此,您要求显示下一个对话框,它在上一个对话框的顶部。这适用于iPhone平台上的对话框或警报视图。

Ed的回答显示了第一个对话框但没有继续。不明显的是,当用户成功登录时,会话委托会发送-didLogin:消息。您可能期望有一个对话委托消息吗?

但要小心,因为您编码的其他情况可能导致会话登录,并且它将在委托方法中运行代码..您可能不希望这样!

此示例的一个示例是会话恢复时。为了保持直截了当,假设您的应用中有两个操作,并且都会向用户Feed发布一个简短的故事。当您要求用户登录或恢复其现有会话时,将发送会话委派消息-didLogin:。您需要确保-didLogin:的实现处理这两种情况和两种操作。

除此之外,请考虑使用最新的SDK和stream.publish请求,或FBStreamDialog类(而不是FBFeedDialog)将故事推送到Facebook。