我想知道如何区分用户点击提交或跳过内联的后到流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
}
答案 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