Facebook-Login automatisieren (unter Benutzung von Facebook SDK)

S

sem_thesis

Fortgeschrittenes Mitglied
0
Hallo!

Stecke an einem letzten wichtigen Problem fest, bevor die App deployt werden kann.

Ich habe das Facebook SDK in meine App integriert. Das Ziel ist Facebook-Daten periodisch zu sammeln.

Jetzt hat das FB-Framework 2 Klassen: Facebook.java (für Authorisierung) und AsyncFacebookRunner (Graph API aufrufen).


Ein Facebook Session sieht dabei so aus:

Code:
private Facebook mFacebook = new Facebook(APP_ID);
private AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook);

mFacebook.authorize(CurrentActivity.this, PERMS, new LoginDialogListener());

private class LoginDialogListener implements DialogListener {
 
        @Override
        public void onComplete(Bundle values) {

         Log.d(TAG, "Login successful!");
                
          /* Now we start data collection */
          updater = new MyFBDataUpdater();
          updater.start();
          Log.d(TAG, "Updater-Thread created");
        
        }

}

public class MyFBDataUpdater extends Thread    {

        static final long DELAY = 1000 * 10;                    // 10s intervals between consequent HTTP-Requests

        @Override
        public void run() {

            while (true) {

                try {
                    Log.d(TAG, "-- New FBData - Updating session has started --");
                                        
                    /* Start Collection - get data step-by-step after 10s intervals */
                    
                    // Get Profile Information
                    mAsyncRunner.request("me", new ProfileRequestListener());
                    // Sleep
                    Thread.currentThread();
                    Thread.sleep(DELAY);
                }

}

}
Dieser Code hier greift auf den Ast /me des Graph API's zu und ruft die Methode ProfileRequestListener welche die Daten verarbeitet.




Nun, wenn ich den Phone neustarte, komme ich wieder auf den Original-Screen wo mich ich (mit Buttonklick) einloggen muss (neuer Aufruf der .authorize() Methode). Da Facebook Single-Sign-On benutzt und meine credentials im Cache gespeichert werden, muss ich meine Daten nicht mehr explizit eingeben und werde einfach eingeloggt.



Ok, meine Frage ist nun:
Die Daten werden ja sowieso im Cache gespeichert. Deshalb finde ich es störend mich immer wieder mit Klick einloggen zu müssen.

Die Idealvorstellung wäre jetzt ein BroadcastReceiver, der auf die BOOT_COMPLETED Variable hört (d.h. Phone ist neu gestartet worden und der alte FB-Thread updater ist zerstört) und einen neuen Thread startet.

Ich hab's versucht und leider immer die Meldung 'No enclosing instance of type HelloUser is accessible. Must qualify the allocation with an enclosing instance of type FBActivity (e.g. x.new A() where x is an instance of FBActivity).' erhalten :(

Es scheint ein static-Problem zu sein.

Sieht jemand dennoch/eine andere Möglichkeit um die Automatisierung vorzunehmen??


PS: Die .authorize()-Methode des FB-Frameworks sieht folgendermassen aus:
Code:
   public void authorize(Activity activity, String[] permissions,
            int activityCode, final DialogListener listener) {

        boolean singleSignOnStarted = false;

        mAuthDialogListener = listener;

        // Prefer single sign-on, where available.
        if (activityCode >= 0) {
            singleSignOnStarted = startSingleSignOn(activity, mAppId,
                    permissions, activityCode);
        }
        // Otherwise fall back to traditional dialog.
        if (!singleSignOnStarted) {
            startDialogAuth(activity, permissions);
        }
    }
Das Framework ist im Attachment beigelegt.
 

Anhänge

  • facebook-android-sdk.zip
    5,4 MB · Aufrufe: 75
Zuletzt bearbeitet:

Ähnliche Themen

B
Antworten
4
Aufrufe
487
bb321
B
F
Antworten
0
Aufrufe
833
FlorianAlfredo
F
S
Antworten
17
Aufrufe
554
jogimuc
J
Zurück
Oben Unten