Ответ 1
Это исправлено с SDK 3.0, поэтому я собираюсь закрыть этот вопрос. Решение: обновите SDK до 3.0.
Я использую последнюю версию SDK для Facebook на 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 error -999.)" UserInfo = 0x98f2ab0 {NSErrorFailingURLKey = https://m.facebook.com/dialog/feed? ссылка = HTTP% 3A% 2F% 2Fwww.thescore.com% 2Fhome% 2Farticles% 2F184248 & описание = Надаль %20pulls %20out %20of %20Paris %20to %20focus %20on %20ATP %20finals & access_token = BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD & заголовок = Арти % %20% %20ScoreMobile %20for %20iPhone & app_id = 124052647629735 & redirect_uri = fbconnect% 3A% 2F% 2Fsuccess & sdk = 2 & display = touch, NSErrorFailingURLStringKey = HTTPS://m.facebook.com/диалог/корма ссылки = HTTP% 3A% 2F% 2Fwww.thescore.com% 2Fhome% 2Farticles% 2F184248 &? описание = Надаль %20pulls %20out %20of %20Paris %20to %20focus %20on %20ATP %20finals & access_token = BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD & Амп; заголовок = Статья %20from %20ScoreMobile %20for %20iPhone & APP_ID = 124052647629735 & redirect_uri = fbconnect% 3A% 2F% 2Fsuccess & SDK = 2 & дисплей = сенсорный}
Однако последующие попытки совместного использования ссылки работают нормально.
Это исправлено с SDK 3.0, поэтому я собираюсь закрыть этот вопрос. Решение: обновите SDK до 3.0.
Просто обновление для всех, наконец, назначено кому-то на Facebook: https://developers.facebook.com/bugs/168127053284477 - надеюсь, скоро оно будет исправлено.
Между тем, кто-то отправил запрос на github с исправлением: https://github.com/facebook/facebook-ios-sdk/pull/436
Надеюсь, что это поможет кому-то, поскольку я все еще сталкивался с такой же ошибкой.
Я также иногда получал этот -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];
}
В FBDialog.m измените это:
UIWindow* window = [UIApplication sharedApplication].keyWindow;
if (!window) {
window = [[UIApplication sharedApplication].windows objectAtIndex:0];
}
Для этого:
UIWindow* window = [[UIApplication sharedApplication].windows objectAtIndex:0];
Проблема решена! Для меня, по крайней мере.
До тех пор, пока 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]);
}
}
Я проследил его, насколько мне кажется, я могу в диалоге .m, который является строкой 414 - dialog.m отправляет URLRequest для диалога в веб-представление, но веб-представление, по-видимому, получает ошибку обратно от сервера Facebook.
Я попытался позвонить в свой код [facebook dialog: @ "feed"...] после 10 секундной задержки после аутентификации, без кости - та же ошибка.
Итак, только для усмешек я назвал код своего корма из -dialog: didFailWithError... после проверки, была ли ошибка -999. Он отлично справляется с этим вызовом.????