Bez wyraźnego powodu moja w pełni funkcjonalna aplikacja z funkcją „Zaloguj się przez Facebooka” przestała wczoraj działać.
Zagłębiłem się w błąd i odkryłem, że z jakiegoś powodu nie można zbudować adresu URL auth wewnętrznie, co powoduje niepowodzenie całego procesu.
Problem wynika z metody + (NSURL *)URLWithScheme:(NSString *)scheme host:(NSString *)host path:(NSString *)path queryParameters:(NSDictionary *)queryParameters error:(NSError *__autoreleasing *)errorRef
w klasie FBSDKInternalUtility
.
W linii 430 próbuje zbudować adres URL:
NSURL *URL = [[NSURL alloc] initWithString:[NSString stringWithFormat:
@"%@://%@%@%@",
scheme ?: @"",
host ?: @"",
path ?: @"",
queryString ?: @""]];
Przejrzałem kod. scheme
, host
, path
i queryString
są ustawione. Chociaż zwraca nil
zamiast adresu URL. Próbowałem wywołać metodę z pustym ciągiem zapytania i faktycznie zbudowałem adres URL. Z jakiegoś powodu queryString
powoduje nieprawidłowe budowanie adresu URL.
Oto queryString
: (zamieniłem identyfikator aplikacji na 123456789)
(lldb) po queryString
?auth_type=rerequest&client_id=123456789&default_audience=friends&display=touch&e2e={%22init%22%3A70747.196361124996}&fbapp_pres=1&redirect_uri=fb123456789%3A%2F%2Fauthorize%2F&response_type=token%2Csigned_request&return_scopes=true&scope=user_birthday%2Cemail%2Cuser_friends%2Cuser_photos&sdk=ios&sdk_version=4.39.0&state={%22challenge%22%3A%22yi8jE3mok79u9BheN8dzCMCviGY%253D%22%2C%220_auth_logger_id%22%3A%22329202ED-2F9B-4DBC-A191-E2C720D9779C%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22}
Co może być tego przyczyną? Działało zaledwie kilka dni temu.
1 odpowiedź
Po otrzymaniu tego samego błędu na symulatorze bardziej szczegółowo przyjrzałem się zmianom w mojej aplikacji. Był to najnowszy pakiet SDK Facebooka (4,39). Uruchomiłem pod update
, aby zaktualizować inne pody, które również zaktualizowały Facebook SDK z 4.38.1 do 4.39.
Wróciłem do wersji 4.38.1 i problem zniknął. Innymi słowy, Facebook SDK 4.39 złamał własną funkcjonalność logowania, praktycznie czyniąc własny SDK bezużytecznym.
Wymuszenie użycia starszej wersji, jak poniżej, rozwiązało problem:
pod 'FBSDKCoreKit', '~> 4.38.1'
pod 'FBSDKLoginKit', '~> 4.38.1'
Podobne pytania
Nowe pytania
ios
iOS to mobilny system operacyjny działający na urządzeniach Apple iPhone, iPod touch i iPad. Użyj tego tagu [ios] w przypadku pytań związanych z programowaniem na platformie iOS. Użyj powiązanych tagów [objective-c] i [swift] w przypadku problemów specyficznych dla tych języków programowania.