Facebook Connect for iOS:dialogDidComplete反应差异化

我想知道如何区分用户点击提交或跳过内嵌的后到streamFBDialog。 任何人都知道要testing什么?

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

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

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

我的理解是

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

会被要求跳过。

我还没有testing过这个理论。

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

 - (void)dialogDidNotCompleteWithUrl:(NSURL *)url 

在你的委托,但它的做法似乎不这样做,因为网页正在返回fbconnect:/ /成功按“跳过”button。 这听起来像是一个bug。

我做了一些实验,看来,提交后,你会得到两个callback:dialogCompleteWithUrl,然后dialogDidComplete。 当post被跳过时,您只会收到dialogDidCompletecallback。

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

在testing期间,我在dialogCompleteWithUrl期间收到的url的格式为“fbconnect:// success /?post_id = 1627754863_182914058401072”

所以如果需要的话,你甚至可以偷看这个价值,以进一步确认你的成功,但我期望,如果这个职位真的失败(而不是跳过),你会得到一个失败的callback。

我最近发现了这个问题的下面的解决scheme。

请参阅braceta的答案。

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

你好,我只是按照@Oh丹尼男孩的链接,我发现这个解决scheme

从这个线程: http : //forum.developers.facebook.net/viewtopic.php? pid=303257#p303257通过添加以下内容到webViewDidFinishLoad修复此问题:in FBDialog.m

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

这使取消button正确调用“fbconnect://取消”而不是“fbconnect://成功”。

 - (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