Ponieważ nie ma zaakceptowanej odpowiedzi, próbuję odpowiedzieć na to, co znalazłem. Po powyższym komentarzu przeczytałem dokumentację o renewCredentialsForAccount, która mówi "Jeśli użytkownik cofnął autoryzację Twojej aplikacji, to żądanie odnowienia zwróci ACAccountCredentialRenewResultRejected."
Co to jest mylące, że to nie użytkownik odrzuca tylko Facebook.
Myślę, że rozumiem teraz tę koncepcję i staram się odpowiedzieć tym, którzy zawiedli w tej kwestii, tak jak ja. W rzeczywistości nie zdawałem sobie sprawy, że mój token FB zostanie całkowicie zresetowany po otrzymaniu wyniku ACAccountCredentialRenewResultRejected. I to jest kluczowy element układanki.
Więc co trzeba zrobić dla różnych wyników:
- ACAccountCredentialRenewResultRenewed jesteś dobry, aby przejść i masz nowy token. Idź i wykonaj swój SLRequest z tym odnowionym tokenem.
- ACAccountCredentialRenewResultRejected: token jest resetowany, w przypadku próby uzyskania jednego będzie to nil. Musisz zażądać od użytkowników uprawnień od zera i "zainstalować" aplikację na Facebooku. Oznacza to, że najpierw pytasz o zwykłe "e-maile + inne uprawnienia do odczytu" i (jeśli potrzebujesz) w osobnym żądaniu, proś o uprawnienia do zapisu. (Ktoś mógłby wyjaśnić, dlaczego Facebook chce, bym dwukrotnie zawracał użytkownika, jeśli chcę na przykład załadować zdjęcie).
- ACAccountCredentialRenewResultFailed: Nie mogłem tego odtworzyć nigdy. Wierzę, że upuścisz komunikat o błędzie do użytkownika.
Oto, co wymyśliłem. Jest to bardzo nieprzyjemne API, które ma słabą dokumentację i brakujące próbki. Również przykłady w Internecie dotyczą "sukcesu" i nie przejmują się tym, że użytkownik może odwoływać uprawnienia poza aplikacją. Jestem w ciągłej próbie & tryb awaryjnego programowania. Utrata siwe włosy, ale zbliża się do końca. Mam nadzieję, że moja odpowiedź pomoże innym.
Mogę odtworzyć ten sam błąd, usuwając aplikację z mojej strony ustawień aplikacji na Facebooku. Wydaje się, że wystarczy, aby pop-up prośby o uprawnienia pojawił się raz jeszcze, aby uzyskać pozwolenie od użytkownika, ale po prostu nie wyświetli się, dopóki nie wyloguję się na moim telefonie. – ZachLHelms
Wygląda jednak na to, że podczas nawiązywania połączenia 'renewCredentialsForAccount' przy następnym uruchomieniu aplikacji i próbie zalogowania się zostanie wyświetlony monit o nadanie uprawnień do aplikacji.Natomiast jeśli nie zadzwonię, nigdy nie poproszę o to. – ZachLHelms
Ten sam problem tutaj. Łatwe do odtworzenia: 1) udziel zezwolenia raz do aplikacji 2) bez opuszczania go do eksploratora wykresów FB i usuwania wszystkich uprawnień 3) wypróbuj renewCredentialsForAccount. Czy ktoś znalazł rozwiązanie tego problemu? FB api ma closeSessionsAndToken (lub podobne) rozwiązujące ten problem. Ale co z social api? – Teddy