13

myślę, że to może wpływać wiele facebook/programistów Androida i jeszcze tam nie wydaje się być to, że wiele dyskusji na temat ...Czy można rozszerzyć tokeny Facebooka za pomocą extendAccessTokenIfNeeded w aplikacji na Androida?

Moje pytanie

Czy ktoś z powodzeniem odświeżony token za pomocą funkcji extendAccessTokenIfNeeded? Jeśli odniosłeś sukces, w jakiej wersji działa urządzenie (lub emulator)?

Tło

otrzymałem e-mail z Facebook mówiąc uprawnienie offline_access zostanie wycofany z dniem 1 maja 2012 roku i Facebook zaleca uaktualnienie do ich najnowszej SDK. W porządku.

Zaktualizowałem do najnowszego SDK, oficjalna aplikacja Facebook jest zainstalowana na moim urządzeniu i (ewentualnie!) Wydaje się, że funkcja Single Sign On działa prawidłowo. Otrzymuję 60-dniowe tokeny, które znów są w porządku.

Problemy rozpoczęły się, gdy próbowałem użyć extendAccessTokenIfNeeded (Kontekst kontekstu, ServiceListener serviceListener). Nie mogłem zmusić go do odświeżenia moich żetonów na dłuższy czas wygaśnięcia. Czekałem 24 godziny między kolejnymi próbami, ale token nie był odświeżany. Jedynym sposobem, w jaki mogę uzyskać odświeżony token, jest wylogowanie się i zalogowanie. Stało się tak również, gdy użyłem przykładowego projektu "Hackbook".

Najbardziej oczywistą odpowiedzią jest to, że robię coś nie tak, ale bug report zostało przesłane do Facebooka, mówiąc, że ... "shouldExtendAccessToken praktycznie prawie zawsze zwróci false". Ten raport otrzymał priorytet "listy życzeń".

Alternatywy dla extendAccessTokenAsNeeded()

w The Facebook documentation about offline_access deprecation znaczników może być przedłużony za pomocą Graph API. Jednak w adresie URL znajduje się kod disadvantage of needing the "App Secret". Zaletą jest to, że użytkownik nie musi mieć zainstalowanej oficjalnej aplikacji Facebooka na swoim urządzeniu.

Inne pomysły i obawy

  • Zmieniając funkcję extendAccessTokenIfNeeded w Facebook.java zawsze zwracają prawdę, myślę, że mam go odświeżyć raz. (Dlatego mówię „myśleć” to dlatego, że nie powtórzy zachowanie i podejrzewam, że muszę czekać kolejne 24 godziny przed przypadkiem innego sukcesu)

  • Zauważyłem, że Hackbook wymaga AndroidHttpClient być importowane. Ta funkcja jest dostępna tylko dla API 8 i nowszych. Czy to oznacza, że ​​Facebook SSO (w szczególności odświeżenie tokena) działa tylko na urządzeniach z API 8 i nowszym?

  • The Facebook.apk included in the SDK jest dość stary. Być może dlatego tokeny nie odświeżają się na emulatorach z API 8 i nowszym?

  • I na koniec wszystko to dotyczy tylko tych osób, które mają zainstalowaną oficjalną aplikację Facebooka ! Trzeba ukończyć inną metodę dla tych osób, które nie mają oficjalnej aplikacji na Facebooku (narzekaj teraz!)

Stosowna Facebook linki

Facebook-Android-SDK at GitHub

Facebook Android Tutorial

Facebook offline_access permission deprecation

Facebook bug report

związane z przepełnieniem stosu pytania

Facebook 60 day access token and Deprecated Offline_Access

Facebook access token can not be extended

How would offline_access work after deprecation after May 1st?

Facebook access token can not be extended

Protecting app secret for extendAccessToken usage (Java/Android)

+0

"Zmieniając funkcję extendAccessTokenIfNeeded w Facebook.java, aby zawsze zwracać wartość true, myślę, że udało mi się ją odświeżyć raz. (Powodem, dla którego mówię" myślę ", jest to, że nie powtórzy to zachowanie i podejrzewam, że muszę poczekaj kolejne 24 godziny, zanim pojawi się szansa na kolejny sukces) "Czy powtórzyłeś test? – nmr

Odpowiedz

3

Nie wiem rozwój Androida, ale jeśli masz problemy z tej funkcji, może jest podobna funkcja CURL ciągu Android, który pozwoli Ci zadzwonić https://graph.facebook.com/oauth/access_token?
client_id=APP_ID& client_secret=APP_SECRET& grant_type=fb_exchange_token& fb_exchange_token=EXISTING_ACCESS_TOKEN

(Google ujawnił: http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html w jaki sposób z Curl Android)

+0

Dziękuję za odpowiedź. Sprawdzę to. – Mel

+1

Nie sądzę, że to zadziała, i nie sądzę, że to dobry pomysł. Myślę, że to nie jest dobry pomysł, ponieważ oznaczałoby to umieszczenie twojego client_secret w twojej aplikacji na Androida, co oznacza, że ​​jest publiczne, co jest złe. Nie sądzę, że to zadziała, ponieważ ten punkt końcowy nie wydaje się być w stanie rozszerzyć tokenów dostępu po ich pierwotnym upływie 60 dni. (Warto jednak przedłużyć 2-godzinne tokeny uwierzytelniające po stronie klienta na 60-dniowe tokeny). – nmr

+1

Połączenie powinno zostać nawiązane ze zdalnego serwera WWW, gdzie client_secret jest naprawdę tajny. Więc możesz AJAX na zdalny serwer z Androidem używając CURL. – DMCS

1

Spróbuj zmienić czas REFRESH_TOKEN_BARRIER, aby nie trzeba było czekać 24 godziny za każdym razem, gdy chcesz przetestować. Zmieniłem moje na około 2 minuty i mogłem zobaczyć, że token dostępu został faktycznie przedłużony, gdy ponownie uruchomiłem aplikację po 2 minutach.

Powiązane problemy