Подтвердить что ты не робот

Facebook Connect для iOS: dialogDidComplete дифференциация ответов

Мне было интересно, как различать запрос пользователя или пропустить его во встроенном FBDialog-потоке. Кто-нибудь знает, что тестировать?

Я использую последнюю iOS Facebook Connect в среде iOS 4.2.

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

Ответ 1

Как сказал Fede и kennbrodhagen, это выглядит как самый простой способ (пока Facebook не зафиксирует эту ошибку):


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

Ответ 2

Я понимаю, что

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

будет вызываться для пропуска.

Я не тестировал эту теорию.

Изменить: Я тестировал это сейчас, и моя теория ошибочна. Код выглядит так, что диалог должен вызывать

- (void)dialogDidNotCompleteWithUrl:(NSURL *)url

у вашего делегата, но, похоже, это не так, поскольку веб-страница возвращает fbconnect://успех для нажатия кнопки "пропустить". Это звучит как ошибка для меня.

Ответ 3

Я сделал несколько экспериментов, и кажется, что когда сообщение отправлено, вы получите два обратных вызова: dialogCompleteWithUrl, а затем dialogDidComplete. Когда сообщение будет пропущено, вы получите только обратный вызов dialogDidComplete.

Вы можете активировать оповещение о своем успехе в обратном вызове dialogCompleteWithUrl. Если вы хотите подождать до тех пор, пока не получите обратный вызов dialogDidComplete, вы можете сохранить некоторое состояние во время обратного вызова dialogCompleteWithUrl, а затем на основе этого состояния запустите свое предупреждение в диалоговом окнеDIDComplete.

Во время моего теста url, который я получил во время диалогаCompleteWithUrl, имел форму "fbconnect://success/? post_id = 1627754863_182914058401072"

Поэтому, если вам нужно, вы даже можете заглянуть в это значение, чтобы еще раз подтвердить свой успех, хотя я ожидаю, что если сообщение действительно потерпит неудачу (в отличие от пропусков), вы получите один из откатных вызовов.

Ответ 5

Привет, я просто следую ссылке @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 Change html, тогда этот код больше не будет работать. Мое решение этой проблемы заключается в следующем:

Вместо того, чтобы ставить JavaScript, статически просто получить его с сервера с регулярным интервалом или механизмом симулятора

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

поэтому в будущем мы можем изменить этот javascript вместо обновления всего приложения.

Я надеюсь, что в будущем эта ошибка будет решена http://bugs.developers.facebook.net/show_bug.cgi?id=5958