2010-12-10 8 views
16

Ich frage mich, wie man zwischen den Benutzern unterscheidet, die im inline Post-to-Stream-FBDialog tippen oder überspringen. Wer weiß was zu testen?Facebook Connect für iOS: dialogDidComplete Antwortdifferenzierung

Ich verwende das neueste iOS Facebook Connect in einer iOS 4.2-Umgebung.

/** 
* 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 
} 

Antwort

33

gelöst werden, wie Fede und kennbrodhagen sagte, ist dies wie der einfachste Weg sieht (bis Facebook diesen Fehler behebt):

 

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

funktioniert perfekt, danke. – Vassily

+0

Vielen Dank @Pavel. Es hat vollkommen gut funktioniert. – Arslan

+0

danke, ich dachte fast, es ist derzeit unmöglich! – manmal

5

Mein Verständnis ist, dass

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

wäre für den Sprung aufgerufen werden.

Ich habe diese Theorie nicht getestet.

Edit: Ich habe es jetzt getestet, und meine Theorie ist falsch. Der Code sieht aus wie der Dialog

- (void)dialogDidNotCompleteWithUrl:(NSURL *)url 

auf Ihrem Delegierten nennen sollte, aber sie praktizieren es scheint so nicht zu tun, da die Web-Seite wird fbconnect Rückkehr: // Erfolg für eine Presse der „überspringen“ -Taste. Das hört sich für mich nach einem Fehler an.

+2

Sie richtig sind. dialogDidComplete wird unabhängig von skip oder Publish aufgerufen. Danke, dass Sie sich die Zeit genommen haben, zu antworten. –

+1

Ich habe dies selbst getestet und festgestellt, dass dialogDidNotComplete aufgerufen wird, wenn der Benutzer den Dialog mit dem X in der oberen rechten Ecke schließt. Überspringen namens dialogDidComplete. – varikin

4

Ich habe etwas experimentiert und es scheint, dass wenn der Beitrag abgeschickt wird, Sie zwei Rückrufe erhalten: dialogCompleteWithUrl und dann dialogDidComplete. Wenn der Post übersprungen wird, erhalten Sie nur den Rückruf dialogDidComplete.

Sie können Ihre Erfolgsbenachrichtigung im Callback von dialogCompleteWithUrl auslösen. Wenn Sie warten möchten, bis Sie den Rückruf dialogDidComplete erhalten haben, können Sie während des Callbacks dialogCompleteWithUrl einen Status speichern und dann basierend auf diesem Status Ihre Warnung in dialogDidComplete absetzen.

Während meines Tests die URL ich während dialogCompleteWithUrl erhielt, war in der Form „fbconnect: // Erfolg/post_id = 1627754863_182914058401072“

Also, wenn es sein muss man auch auf diesem Wert spähen könnte, um weiteren Erfolg zu bestätigen, obwohl ich erwarte, dass, wenn der Beitrag wirklich fehlgeschlagen ist (im Gegensatz zu einem Überspringen), Sie stattdessen einen der Fail Callbacks erhalten werden.

+0

Ich habe mich in Andy J Buchanans Antwort vertieft und daran gedacht, den Staat zu retten. Was mich beunruhigt, ist das Ändern des Facebook-Codes. Ich habe keine Ahnung, was sie in der Zukunft ändern oder die rechtlichen Konsequenzen von Änderungen. Egal, danke, dass du dir die Zeit genommen hast zu antworten. –

+1

Für mich rufen beide Schaltflächen beide Funktionen auf: dialogCompleteWithUrl und dialogDidComplete. Die einzige Möglichkeit, zwischen ihnen zu unterscheiden, besteht darin, dass die URL beim Post-Post den Parameter "post_id" aufweist, bei Überspringen jedoch nicht. Danke für die Antwort! –

2

Ich habe vor kurzem die folgende Lösung für dieses Problem entdeckt.

Bitte lesen Sie die Antwort von braceta.

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

+0

+1 Danke dafür! –

+0

Kein Problem. Hoffentlich aktualisiert Facebook bald sein SDK. –

+0

Yap. Vielen Dank ... – yogs

1

Hallo Ich folge nur Link von @Oh Danny Boy und ich fand diese Lösung

aus diesem Thread: http://forum.developers.facebook.net/viewtopic.php?pid=303257#p303257 dieses Fest durch die folgenden webViewDidFinishLoad Zugabe: in FBDialog.m

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

Dies bewirkt, dass die Abbrechen-Schaltfläche "fbconnect: // cancel" statt "fbconnect: // success" korrekt aufruft.

- (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]; 
} 

Sein funktioniert:

Aber es gibt eine weitere Ausgabe Wenn Facebook ändern html dann wird dieser Code nicht mehr. Meine Lösung für dieses Problem ist, dass:

Statt setzt JavaScript statisch es nur vom Server in regelmäßigen Abständen erhalten oder similer Mechanismus

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

so in Zukunft können wir diese Javascript ändern, anstatt ganze Anwendung zu aktualisieren.

Ich hoffe, in Zukunft wird dieser Fehler http://bugs.developers.facebook.net/show_bug.cgi?id=5958

+0

Nicht für mich arbeiten. Gab es ein Update auf Facebook SDK mit Fix für dieses? – DancOfDeth