2010-12-10 66 views
16

我想知道如何区分用户点击提交或跳过内联后流FBDialog。任何人都知道要测试什么?Facebook Connect for iOS:dialogDidComplete响应分化

我正在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 
} 

回答

33

由于菲德和kennbrodhagen说,这看起来像最简单的方法(实之前修复这个bug):

 

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

作品完美,谢谢。 – Vassily 2012-02-23 16:35:09

+0

谢谢@Pavel。它工作得很好。 – Arslan 2012-03-27 14:59:00

+0

谢谢,我几乎认为这是不可能的! – manmal 2012-05-28 12:10:06

5

我的理解是,

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

将呼吁跳跃。

虽然我没有测试过这个理论。

编辑︰ 我现在测试它,我的理论是错误的。代码如下所示的对话框应该叫

- (void)dialogDidNotCompleteWithUrl:(NSURL *)url 
您委托

,但实践它似乎没有这样做,因为网页返回fbconnect://成功“跳过”按钮的按下。这听起来像是一个bug。

+2

你是正确的。无论跳过还是发布,都会调用dialogDidComplete。感谢您花时间回答。 – 2010-12-13 16:23:42

+1

我自己测试了这个,发现dialogDidNotComplete在用户关闭右上角的X对话框时被调用。跳过叫做dialogDidComplete。 – varikin 2011-04-20 16:36:05

4

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

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

在我的测试中,我dialogCompleteWithUrl期间收到的网址是形式的“fbconnect://成功/ POST_ID = 1627754863_182914058401072”

所以,如果需要的话,你甚至可以在这个值偷看进一步确认您的成功,尽管我期望如果这篇文章确实失败了(而不是跳过),你会得到其中一个失败回调。

+0

我挖掘了Andy J Buchanan的回答,并想到拯救国家。我修改Facebook代码的麻烦是什么。我不知道他们将来可能会改变什么,或者做出任何修改的法律后果。无论如何,感谢您花时间回答。 – 2010-12-21 20:12:22

+1

对于我来说,这两个按钮都会调用两个函数:dialogCompleteWithUrl和dialogDidComplete。区分它们的唯一方法是当post实际完成时,url具有post_id参数,当跳过它时不会。 感谢您的回答! – 2011-08-24 04:03:19

2

我最近发现了这个问题的以下解决方案。

请参阅braceta的答案。

https://github.com/ideashower/ShareKit/issues#issue/8

+0

+1感谢您的支持! – 2011-02-07 20:40:55

+0

没问题。希望Facebook很快更新他们的SDK。 – 2011-02-07 22:14:23

+0

Yap。非常感谢... – yogs 2011-04-22 05:00:22

1

你好,我只要按照链接通过@Oh丹尼男孩 ,我发现这个解决方案

从这个线程: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的静态刚刚从服务器得到它在规则的间隔或similer机制

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

所以在未来我们可以改变这个JavaScript,而不是更新整个应用程序的。

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

+0

不适合我。是否有更新到Facebook SDK与此修复? – DancOfDeth 2012-09-21 14:48:13