13

Ich denke, das eine Menge von Facebook/Android-Entwickler bewirken könnte und doch scheint es nicht so viel Diskussion über das Thema zu sein ...Können Facebook-Tokens mit extendAccessTokenIfNeeded in einer Android-App erweitert werden?

Meine Frage

hat erfolgreich ein jemand aufgefrischt Token mit der Funktion extendAccessTokenIfNeeded? Wenn Sie Erfolg hatten, in welcher Version wurde das Gerät (oder der Emulator) ausgeführt?

Hintergrund

erhielt ich eine E-Mail von Facebook die offline_access Erlaubnis sagen, wird von 1. Mai 2012 und Facebook empfohlen Upgrade auf ihre neuesten SDK veraltet. Fein.

Ich habe das neueste SDK aktualisiert, die offizielle Facebook App ist auf meinem Gerät installiert und (irgendwann!) Scheint Single Sign On zu funktionieren. Ich erhalte 60 Tage Tokens, die wieder in Ordnung sind.

Probleme gestartet, als ich versuchte, extendAccessTokenIfNeeded (Kontext Kontext, ServiceListener serviceListener) zu verwenden. Ich konnte es nicht bekommen, um meine Tokens für eine längere Ablaufzeit zu aktualisieren. Ich habe 24 Stunden zwischen den Versuchen gewartet, aber das Token wurde nicht aktualisiert. Die einzige Möglichkeit, ein aktualisiertes Token zu erhalten, besteht darin, sich abzumelden und einzuloggen. Dies geschah auch, als ich das Beispielprojekt "Hackbook" verwendete.

Die offensichtlichste Antwort ist, dass ich etwas falsch mache, aber, ein bug report wurde an Facebook gesendet, sagend, dass ... "sollteExtendAccessToken praktisch fast immer falsch zurückgeben." Dieser Bericht wurde mit der Priorität "Wunschliste" versehen.

Alternativen zum extendAccessTokenAsNeeded()

In den Facebook documentation about offline_access deprecation Token können unter Verwendung der Graph API erweitert werden. Dies hat jedoch die disadvantage of needing the "App Secret" in der URL enthalten. Ein Vorteil ist, dass der Benutzer die offizielle Facebook-App nicht auf seinem Gerät installiert haben muss.

Andere Ideen und Anliegen

  • Durch die extendAccessTokenIfNeeded Funktion in Facebook.java Wechsel treu immer wieder zurückkehren, ich glaube, ich habe es einmal zu aktualisieren. (Der Grund, warum ich „denken“, sagen ist, weil es nicht das Verhalten wiederholen und ich vermute, ich muss weitere 24 Stunden warten, bevor irgendeine Wahrscheinlichkeit eines weiteren Erfolg)

  • Ich bemerke, dass Hackbook AndroidHttpClient erfordert importiert werden. Dies ist nur für API 8 und höher verfügbar. Heißt das , dass Facebook SSO (insbesondere Token-Aktualisierung) nur auf Geräten mit API 8 und höher funktioniert?

  • Die Facebook.apk included in the SDK ist ziemlich alt. Vielleicht werden die Token deshalb nicht auf Emulatoren aktualisiert, auf denen API 8 und höher ausgeführt wird?

  • Und schließlich bezieht sich das alles nur auf jene Leute, die die offizielle Facebook-APP installiert haben! Für die Leute ohne die offizielle Facebook-App muss eine andere Methode abgeschlossen werden (beschweren Sie sich jetzt!

    )

Relevante Links Facebook

Facebook-Android-SDK at GitHub

Facebook Android Tutorial

Facebook offline_access permission deprecation

Facebook bug report

Verwandte Stack Overflow Fragen

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

"Indem ich die extendAccessTokenIfNeeded-Funktion in Facebook.java ändere, um immer true zurück zu geben, denke ich, dass ich sie einmal auffrische. Der Grund, warum ich" Think "sage, ist, dass das Verhalten nicht wiederholt wird Warten Sie weitere 24 Stunden, bevor Sie wieder einen Erfolg haben.) "Haben Sie erneut getestet? – nmr

Antwort

3

Ich weiß nicht, Android Entwicklung, aber wenn Sie Probleme mit dieser Funktion sind, vielleicht ist es eine ähnliche Funktion ROTATION innerhalb Android, die Sie 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 ergab nennen können: http://thesoftwarerogue.blogspot.com/2010/05/porting-of-libcurl-to-android-os-using.html, wie zum Kräuseln von Android)

+0

Vielen Dank für Ihre Antwort. Ich werde ermitteln. – Mel

+1

Ich glaube nicht, dass das funktioniert, und ich denke nicht, dass es eine gute Idee ist. Ich denke, das ist keine gute Idee, denn das würde bedeuten, dass du deinen client_secret in deine Android-App einbetten musst, was bedeutet, dass es öffentlich ist, was schlecht ist. Ich glaube nicht, dass dies funktionieren wird, da dieser Endpunkt nicht in der Lage ist, Zugriffstoken über den ursprünglichen Ablauf von 60 Tagen hinaus zu erweitern. (Es ist jedoch gut, 2-stündige clientseitige Authentifizierungs-Tokens in 60-Tage-Token zu verlängern.) – nmr

+1

Der Aufruf sollte von einem entfernten Webserver erfolgen, wo der client_secret wirklich geheim ist. So könntest du AJAX zum entfernten Webserver von Android mit CURL verwenden. – DMCS

1

Versuchen Sie, die Zeit von REFRESH_TOKEN_BARRIER zu ändern, so dass Sie nicht 24 Stunden warten müssen, wenn Sie testen möchten. Ich änderte meine auf ungefähr 2 Minuten und ich konnte sehen, dass das Zugriffstoken tatsächlich verlängert wurde, als ich die App nach 2 Minuten neu startete.