这是来自Facebook开发者论坛的转贴,其中没有人回复。
这就是我想做的事情:
在需要登录的情况下实际发生了什么:
似乎没有办法使用委托方法来判断用户是否已完成登录;似乎从未在登录对话框中调用dialogDidSucceed。就此而言,似乎没有办法告诉他们是否取消了(在这种情况下,进入Feed对话框将毫无意义)。
我是否尝试过不可能的事?
答案 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。