Meine Anwendung verfügt über Funktionalität, die einige Inhalte auf Server senden und (müssen) es auf Facebook posten. Es benutzt Dienst zum Senden (für Speicherdaten verwende ich sqlite). Ist es möglich, Facebook-Sitzungen e.t.c vom Dienst zu behandeln? Ich brauche es, weil die Zeit, wenn der Inhalt in DB gespeichert wird und die Sendezeit unterschiedlich sein kann (die Verbindung wird sehr lange verloren gehen und das Senden beginnt, sobald die Verbindung verfügbar ist, aber nur der Dienst meiner Anwendung wird aktiv sein Zeit). Ich kann keine Lösung für diesen Fall finden (und eine gute Lösung wird großartig sein). Bitte helfen Sie.Verwenden von Facebook Android SDK aus Service
Antwort
Benutzer müssen der Anwendung explizit Berechtigungen erteilen, und Android-Dienste unterstützen Activity.startActivityForResult() nicht. Daher ist es nicht möglich, eine Sitzung zu öffnen oder neue Berechtigungen hinzuzufügen, indem sie von einem Dienst erneut autorisiert werden.
Wenn Sie jedoch eine Sitzung in einer der Aktivitäten Ihrer App öffnen/erneut autorisieren, wird der Status der Sitzung standardmäßig in SharedPreferences gespeichert. Wenn ein Service nach diesem Ereignis eine Sitzung erstellt, wird er in SessionState.CREATED_TOKEN_LOADED enden. Wenn die Datei Session.getState() CREATED_TOKEN_LOADED ist, ist die Sitzung garantiert in der Lage, openForRead() ohne Benutzeroberfläche zu verwenden, und es ist zulässig, eine leere Aktivität zu übergeben. Die Sitzung verfügt über alle Berechtigungen, die von Ihrer Aktivität gespeichert wurden.
all dies zu vereinfachen, können Sie da einfach anrufen:
Session session = Session.openActiveSession(this);
Dieser Aufruf gibt null zurück, wenn kein gültiges Token in SharedPreferences war.
Wenn Ihre App-Benutzeroberfläche über einen Einstellungsbereich verfügt, können Sie das Token in erster Linie speichern, indem Sie ein LoginFragment als eines der Einstellungsfelder hinzufügen. Dadurch können sich Ihre Benutzer an- und abmelden und sollten den Sitzungsstatus so speichern, dass Ihr Dienst ihn abholen kann, wenn er sich in derselben App befindet.