Facebook Connect for iOS:dialogDidComplete响应差异化

时间:2010-12-10 18:10:47

标签: ios facebook

我想知道如何区分用户点击提交或跳过内联的后到流FBDialog。有谁知道要测试什么?

我在iOS 4.2环境中使用最新的iOS Facebook Connect。

/**
 * Called when a UIServer Dialog successfully return.
 */
- (void)dialogDidComplete:(FBDialog *)dialog {
    if user tapped submit and post was successful
        alert user of successful post

    if user tapped "skip" (cancel equivalent)
        do not display alert
}

4 个答案:

答案 0 :(得分:33)

正如Fede和kennbrodhagen所说,这看起来是最简单的方式(直到Facebook修复这个错误):


- (void) dialogCompleteWithUrl:(NSURL*) url
{
    if ([url.absoluteString rangeOfString:@"post_id="].location != NSNotFound) {
        //alert user of successful post
    } else {
        //user pressed "cancel"
    }
}

答案 1 :(得分:5)

我的理解是

- (void)dialogDidNotComplete:(FBDialog *)dialog;

将被要求跳过。

我没有测试过这个理论。

编辑: 我现在测试了,我的理论错了。代码看起来像对话框应该调用

- (void)dialogDidNotCompleteWithUrl:(NSURL *)url

在您的代理人身上,但实践似乎没有这样做,因为网页返回fbconnect://成功按下“跳过”按钮。这对我来说听起来像个错误。

答案 2 :(得分:4)

我做了一些实验,似乎提交帖子后你会得到两个回调:dialogCompleteWithUrl然后是dialogDidComplete。跳过帖子后,您将只收到dialogDidComplete回调。

您可以在dialogCompleteWithUrl回调中触发成功提醒。如果您想等到收到dialogDidComplete回调,则可以在dialogCompleteWithUrl回调期间保存一些状态,然后根据该状态在dialogDidComplete中触发警报。

在我的测试期间,我在dialogCompleteWithUrl期间收到的网址格式为“fbconnect:// success /?post_id = 1627754863_182914058401072”

所以,如果需要,你甚至可以偷看这个值来进一步证实你的成功,虽然我希望如果帖子确实失败了(而不是跳过),你将得到一个失败的回调。

答案 3 :(得分:1)

您好我只是关注@Oh Danny Boy的链接 我找到了这个解决方案

来自这个主题:http://forum.developers.facebook.net/viewtopic.php?pid=303257#p303257 修复此问题,方法是将以下内容添加到webViewDidFinishLoad:在FBDialog.m

[_webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('cancel')[0].onclick = function onclick(event) { window.location.href = 'fbconnect://cancel'; return false;}"];

这使取消按钮正确调用“fbconnect:// cancel”而不是“fbconnect:// success”。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
  [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByName('cancel')[0].onclick = function onclick(event) { window.location.href = 'fbconnect://cancel'; return false;}"];

  [_spinner stopAnimating];
  _spinner.hidden = YES;

  self.title = [_webView stringByEvaluatingJavaScriptFromString:@"document.title"];
  [self updateWebOrientation];
}

它的工作正常:

但还有一个问题如果Facebook更改HTML,那么这段代码将不再有效。 我对这个问题的解决方案是:

而不是静态地放置JavaScript只是定期从服务器获取它或者是模拟器机制

[_webView stringByEvaluatingJavaScriptFromString://We need to control this javascript from server//];

因此将来我们可以更改此javascript而不是更新整个应用程序。

我希望将来这个错误能够得到解决http://bugs.developers.facebook.net/show_bug.cgi?id=5958