Jak radzić sobie z wycofywaniem się przez Facebook z trybu offline_access, gdy używasz tokena zarówno w aplikacji na iOS, jak i na serwerze

Facebookadezaprobata zoffline_access pozwolenie nadchodzi w maju 2012 r., a dokumentacja nie daje nam wystarczających informacji, jak sobie z tym poradzić.

Dysponujemy aplikacją iOS i odpowiadającą jej usługą, która zasila ją i integruje z Facebookiem w głęboki sposób, aby wykorzystać listę znajomych w ramach aplikacji (więc jeśli znajomi z FB również korzystają z aplikacji, możesz łatwiej się połączyć). To tak, jak wszystkie aplikacje społecznościowe wydają się działać, więc nic specjalnego.

Klient

Nasza aplikacja korzystaFacebook iOS SDK aby umożliwić użytkownikowi zalogowanie się, o które obecnie prosimyoffline_access. Token jest utrwalony w naszej aplikacji na iOS, ale również wysyłany na nasz serwer, gdzie jest zapisywany. Klient działa w imieniu użytkownika, aby opublikować aktualizacje kanału informacyjnego użytkownika (prosimy o to)publish_stream pozwolenie).

serwer

Nasz serwer okresowo sprawdza, czy znajomi FB użytkownika korzystają z naszej aplikacji. Następnym razem, gdy użytkownik zaloguje się, ujawniamy zawartość i relacje w określony sposób, aby promować znajomych tego użytkownika. Serwer działa również w imieniu użytkownika, aby okresowo łączyć się z API grafów i uzyskać aktualną listę znajomych użytkownika. Dzięki temu możemy uwzględnić zmiany w relacjach użytkownika i odzwierciedlić je w naszej aplikacji. Robimy to, gdy użytkownik nie korzysta obecnie z aplikacji, aby mieć jak najlepsze wrażenia przy następnym użyciu. Aby to umożliwić, nasza aplikacja na iOS wysyła token dostępu do naszego serwera, którego używa i dlaczego o to prosimyoffline_access.

Uwaga: Jeśli użytkownik wyloguje się z naszej aplikacji jawnie, usuwamy tokeny dostępu zarówno z klienta, jak i serwera.

Problemy

Teraz, gdy nie ma już tokena stałego dostępu, którego możemy użyć, staram się znaleźć najlepszą praktykę, aby nadal włączać nasze scenariusze, wykorzystując nowy, zamierzony sposób obsługi i rozszerzania tokenów dostępu na Facebooku. Dokumentacja nie jest niestety całkowicie pomocna.

pytania

ZA. Kiedy uwierzytelniasz się za pomocą najnowszego zestawu Facebook iOS SDK, jaki jest domyślny czas życia tokena dostępowego?Ten dokument mówi, że rozszerzone żądanie tokena da ci taki, który trwa 60 dni. Toinny dokument mówi o pierwszej prośbie o token dostępu i wspomina o różnych ważnościach, ale tak jestniejasny i czy mówi o konkretnych czasach ważności:

(nacisk jest mój)

Kiedy otrzymasz token dostępu z Facebooka, będzie on ważny natychmiast i będzie można go użyć w żądaniach do API przez pewien okres czasu określony przez Facebook. Po upływie tego okresu token dostępu jest uznawany za wygasły i użytkownik musi zostać ponownie uwierzytelniony, aby aplikacja uzyskała nowy token dostępu.Czas, przez który dany token dostępu jest ważny, zależy od sposobu jego wygenerowania.

Istnieją również zdarzenia, które mogą spowodować, że token dostępu stanie się nieważny przed oczekiwanym czasem wygaśnięcia. Takie zdarzenia obejmują zmianę hasła przez użytkownika, odświeżenie aplikacji to App Secret. Radzenie sobie ze zmieniającymi się czasami wygaśnięcia tokenów dostępu i obsługa przypadku, gdy token dostępu staje się nieważny przed oczekiwanym czasem wygaśnięcia, jest niezbędny do budowania solidnych doświadczeń społecznych.

B. Dla klienta, teraz, gdy token dostępu nie jest koniecznie długo żywy, właściwym rozwiązaniem jest dla nas:

Pozwól korzystać z logowania przez FB, a następnie wykrywaj, gdy token dostępu wygasa. Jeśli tak, zadzwoń do zestawu FB iOS SDK, aby ponownie uwierzytelnić / ponownie autoryzować? (powinno to spowodować, że użytkownik odskoczy do aplikacji FB iOS, aw większości przypadków natychmiast wróci do naszej aplikacji z nowym tokenem dostępu).

DO. Wedługten wpis na blogu Znalazłem, że możesz rozszerzyć token dostępu tylko raz:

Czy mogę wymienić mój 60-dniowy token dostępu na nowy 60-dniowy token dostępu?

Nie, przepraszam, że nie możesz. Możesz wymienić tylko ważny (oznaczający bieżący) token dostępu użytkownika na rozszerzony. Nie można rozszerzyć już rozszerzonego tokena dostępu.

Na kliencie mogę sobie z tym poradzić, prosząc o ponowne uwierzytelnienie / ponowną autoryzację, jak wspomniałem w pytaniu B. Nie działa to jednak na naszym serwerze. Z pewnością możemy odnowić serwer raz na 60 dni, ale co się stanie w 61. dniu? Serwer przestaje być w stanie zsynchronizować listę znajomych?

RE. Wydaje się sensowne sprawdzać ważność tokena dostępu FB za każdym razem, gdy aplikacja uruchamia lub ponownie nawadnia ze snu. Jak najlepiej to sprawdzić w naszej aplikacji na iOS? Czy istnieje zalecany punkt końcowy do wywołania w celu sprawdzenia poprawności tokena? Powinniśmy po prostu zadzwonićhttps://graph.facebook.com/me przekazując token dostępu i sprawdzając odpowiedź?

Uwaga: z pewnością możemy nagraćexpires czas, gdy otrzymamy początkowo rozszerzony token, ale nie jest to wiarygodne, ponieważ użytkownik może cofnąć zgodę naszej aplikacji w dowolnym momencie, co sprawia, żeexpires czas niewiarygodny punkt danych na temat ważności

questionAnswers(2)

yourAnswerToTheQuestion