Первый диалог после аутентификации завершается неудачно и закрывает диалог - PullRequest
17 голосов
/ 04 ноября 2011

Я использую последнюю версию Facebook SDK на iOS 5. Я могу использовать SSO для успешной аутентификации пользователя, а затем я пытаюсь поделиться ссылкой, подобной этой:

NSString *appId = [[[NSBundle mainBundle] infoDictionary] 
                                          objectForKey:TSFacebookAppID];

NSMutableDictionary* params = 
[NSMutableDictionary dictionaryWithObjectsAndKeys:
                          appId,                @"app_id",
                          [url absoluteString], @"link
                          title,                @"caption",
                          body,                 @"description",
                          nil];

[facebook dialog:@"feed" andParams:params andDelegate:self];

При первой попыткепосле этого диалоговое окно появляется и немедленно закрывается, вызывая диалоговое окно: didFailWithError: метод делегата ошибки.Ошибка:

Ошибка домена = NSURLErrorDomain Code = -999 "Операция не может быть завершена. (NSURLErrorDomain Ошибка -999.)" UserInfo = 0x98f2ab0 {NSErrorFailingURLKey = https://m.facebook.com/dialog/feed?link=http%3A%2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&description=Nadal%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&access_token=BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&caption=Article%20from%20ScoreMobile%20for%20iPhone&app_id=124052647629735&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touch,NSErrorFailingURLStringKey = https://m.facebook.com/dialog/feed?link=http%3A%2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&description=Nadal%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&access_token=BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&caption=Article%20from%20ScoreMobile%20for%20iPhone&app_id=124052647629735&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touch}

Однако последующие попытки поделиться ссылкой работают нормально.

Ответы [ 6 ]

10 голосов
/ 14 февраля 2012

Просто обновление для всех, оно наконец назначено кому-то на Facebook: https://developers.facebook.com/bugs/168127053284477 - надеюсь, это будет исправлено в ближайшее время.

Тем временем кто-то отправил запрос на извлечение на github с исправлением:https://github.com/facebook/facebook-ios-sdk/pull/436

Надеюсь, это кому-нибудь поможет, так как я все еще сталкивался с той же ошибкой ..

8 голосов
/ 04 февраля 2012

Я также иногда получал эту ошибку -999 NSURLDomainError при попытке вызвать окно публикации в Facebook. Я выбрал стратегию игнорирования кода ошибки, о чем упоминал Сеньор в комментариях.

Причина, по которой я не чувствую себя так плохо в этом исправлении, заключается в том, что FBLoginDialog фактически уже игнорирует эту ошибку. Проверьте код в github:

https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBLoginDialog.m#L85

Чтобы быть точным, вот как выглядит мой метод webView: didFailLoadWithError в FBDialog.m:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
// 102 == WebKitErrorFrameLoadInterruptedByPolicyChange
NSLog(@"FBDialog webView didFailLoadWithError:%@ %d",error.domain,error.code);
if ([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999)
    return;

if ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102)
    return;

[self dismissWithError:error animated:YES];
}
4 голосов
/ 05 ноября 2011

В FBDialog.m измените это:

UIWindow* window = [UIApplication sharedApplication].keyWindow;
if (!window) {
    window = [[UIApplication sharedApplication].windows objectAtIndex:0];
}

К этому:

UIWindow* window = [[UIApplication sharedApplication].windows objectAtIndex:0];

Проблема решена! Для меня, по крайней мере.

1 голос
/ 12 сентября 2012

Это было исправлено в 3.0 SDK, поэтому я собираюсь закрыть этот вопрос.Решение: обновите SDK до 3.0.

1 голос
/ 05 января 2012

Пока Facebook не исправит их SDK, я не нашел лучшего решения, чем этот:

- (void)dialog:(FBDialog *)dialog didFailWithError:(NSError *)error{

    if([error code] == -999){
        DLog(@"Error -999 found re-open webview");

        [facebook dialog:@"apprequests"
               andParams:_dialogParams
             andDelegate:self];

    }else{
        DLog(@"Error opening facebook dialog : %@", [error description]);
    }
}
0 голосов
/ 04 ноября 2011

Я проследил это назад, насколько мне кажется, в dialog.m, который является строкой 414 - dialog.m отправляет URLRequest для диалога в веб-представлении, но веб-представление, по-видимому, возвращает ошибку с сервера Facebook.

Я попытался вызвать мой код [facebook dialog: @ "feed" ...] после 10-секундной задержки после аутентификации, без кубиков - та же ошибка.

Итак, просто ради ухмылки я вызвал код фида из -dialog: didFailWithError ... после проверки, не было ли ошибки -999. Это прекрасно работает от этого звонка. ????

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...