2013-06-20 10 views
7

Tworzę ACAccountStore, uzyskuję dostęp do konta facebook użytkownika, przechowuję konto w obiekcie ACAccount i mogę odzyskać token z poświadczeń. Ale kiedy spróbuję użyć tego tokena do pobrania informacji z Facebooka, nie będzie on uwierzytelniany, a próba odnowienia poświadczeń za pomocą renewCredentialsForAccount przyniesie tylko odpowiedź ACAccountCredentialRenewResultRejected.Sposób postępowania z komunikatem "ACAccountCredentialRenewResultRejected" podczas wywoływania renewCredentialsForAccount

Nie mogę otworzyć okna z uprawnieniami, aby ponownie wyświetlić prośbę o pozwolenie w jakikolwiek łatwy sposób. Jedynym sposobem, w jaki mogę go uzyskać, aby ponownie poprosić o pozwolenie, jest zmiana uprawnień, o które proszę w aplikacji, lub usunięcie i ponowne dodanie mojego konta na Facebooku w ustawieniach.

Jak uzyskać w tym momencie poprawny token autoryzacji?

+0

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

+0

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

+0

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

Odpowiedz

3

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.

+0

bardzo przydatne i szczegółowe wyjaśnienie, kciuk w górę! –

Powiązane problemy