plusone

20. November 2011

APP mit Facebook-SDK für Android (Tutorial)

Guten Abend,

als Google+ released wurde hab ich darüber berichtet. Nun ist ein größeres Netzwerk an der Reihe. Ich spreche hier von Facebook. Facebook ist umfangreich und das Erstellen einer eigenen APP sollte  gut durchdacht ein. Stefan hat sich bereits mit diesen Thema intensiv beschäftigt und bietet eine bemerkenswerte Zusammenfassung an.
Ich habe die developer-Seite durchstöbert und auf mein lieblings Thema gestoßen Facebook-Android-SDK. Damit könnt ihr auf den Content von Facebook zugreifen.
Sprich der Benutzer der eure APP benutzt, kann nach neuen Freunden suchen, etwas auf die Pinnwand post oder einfach Facebook im WebView öffnen.

Dieses Tutorial zeigt im Crashkurs, wo ihr das SDK bekommt und wie ihr die erste Verbindung zu Facebook aufbauen könnt.

So kommen wir zu dem, was ihr braucht.
Als erstes ist es natürlich das Facebook-SDK, das kriegt ihr mit GIT unter https://github.com/facebook/facebook-android-sdk.
Ihr könnt es als ZIP runterladen oder mit Eclipse Plugin - egit (Downloadlink: http://download.eclipse.org/egit/updates-nightly).

Aus diesen Paket ist das Projekt Facebook für uns interessant. Es ist quasi die lib, die ihr benutzten werdet.
Ich habe mir auch das Example-Projekt kopiert, gekürzt und damit diesen Test durchzuführen. Eure APP wird Grundsätzlich mit new Facebook(APP_ID) starten. Das ist die Basis!
Die Variable APP_ID ist ein String und wird von developers.facebook.com bezogen.
Eure APP Auflistungen findet ihr unter https://developers.facebook.com/apps.
Was ihr dafür brauch ist ein Facebook-Account und dieser muss mit einem Handy oder Kreditkarte bestätigt sein!
Hier braucht ihr euch nicht extra bemühen, ihr werdet schon früh genug gefragt. Wartet bis ihr dazu aufgefordert werdet.


So nun braucht ihr auf  "+ neue Anwedung erstellen" klicken. Im Dialog der auftaucht füllt ihr den Namen aus und hackt die Facebook Plattform Policies an(vorher lesen!). Nach dem "weiter" kommt ein Captcha und eure APP-Zugang ist erstellt.



So sieht jetzt mein Test-APP Zugang. Wie ihr sehen könnt ist meine APP_ID 275975675772409 und diese brauch ich für die Instanzierung von der Facebook-Klasse.

So nun bitte erstellt ein Android-Projekt eurer Wahl und kopiert die src- und drawable-Dateien vom Facebook-Projekt, was sich im SDK befinden.

Damit ihr das Example-Projekt nicht einfach reinkopiert, zeig ich euch eine gekürzte Version. Die bei mir funktioniert.

package de.alexroid.test.facebook;

import java.io.IOException;
import java.net.MalformedURLException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.FacebookError;
import com.facebook.android.Facebook.DialogListener;

public class TestActivity extends Activity {

    private static final String[] PERMISSIONS = new String[] {
            "publish_stream", "read_stream", "offline_access" };
    private final Facebook authenticatedFacebook = new Facebook(
            "275975675772409");

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        authenticatedFacebook.authorize(TestActivity.this, PERMISSIONS,
                new TestLoginListener());
    }

    public class TestLoginListener implements DialogListener {

        public void onComplete(Bundle values) {
            try {
                String response = authenticatedFacebook.request("me");
                Log.i("INFO", response);
                // Wenn response gefüllt ist,
                // habt ihr das wichtigste erreicht!

            } catch (MalformedURLException e) {
                e.printStackTrace();

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public void onCancel() {
        }

        public void onError(DialogError e) {
            e.printStackTrace();
        }

        public void onFacebookError(FacebookError e) {
            e.printStackTrace();
        }
    }
}

Bevor ihr das blind kopiert und einfügt, sag ich euch, dass es nicht laufen wird. Ohne den angepassten Android Schlüssel-Hash läuft es nicht, aber dazu gleich mehr.

Kommen wir zuerst zum Ablauf. In der onCreate-Methode authentifiziert ihr euch als Benutzer. Dazu wird eure aktuelle Activity mit den Permissions und einem Listener für das Resultat übergeben. Ich habe die Beispiel-PERMISSIONS aus dem Example-Projekt. Der Benutzer sieht beim Ausführen diesen Codes das Loginfenster von Facebook (eigenständiger Facebook-Dialog). Das Resultat diesen Dialogs könnt ihr in eurem Listener abfangen.

Bei meinem Beispiel heißt die Klasste TestLoginListene und implementiert den DialogListener von Facebook, dieser befindet sich im Projekt Facebook aus dem SDK.
Die einzelnen Methoden erklären sich anhand ihrer Bezeichnungen.
Bei einem erfolgreichem Login landen wir in der Methode onComplete(..). Unser authenticatedFacebook ist nun einsatzbereit. Als Test könnt ihr nach "me" fragen. Das ist ein Verweis auf den eingeloggten Benutzer. Wenn ich mich einlogge, kommt diese Konsolenausgabe:
11-20 19:21:30.512: INFO/INFO(22957): {"id":"100000628075884","name":"Alexander Fink","first_name":"Alexander","last_name":"Fink","link":"http:\/\/www.facebook.com\/profile.php?id=100000628075884","gender":"male","email":"versteckte\u0040gmail.com","timezone":1,"locale":"de_DE","verified":true,"updated_time":"2011-10-30T15:31:52+0000"}
Ist doch schön geordnet und die wichtigste Informationen sind auf einen Schlag sichtbar.
Wenn ihr nun http://www.facebook.com/profile.php?id=100000628075884 eingebt, dann kommt ihr auf mein Profil *g

Login erfolgreich. Antwort entspricht meinem Account. Fertig!

Moment habe ich nicht gesagt, nicht blind kopieren und einfügen?

Was noch fehlt ist der Android Schlüssel-Hash. Ihr startet einfach eure APP und es kommt ein Fehler mit ein Schlüssel.
Den kopiert ihr und fügt gleich in der summary ein. Dazu öffnet ihr https://developers.facebook.com/apps und klickt unter "Einsellungen" "Einstellungen bearbeiten".
Unter der Überschrift "Wähle aus, wie sich deine Anwendung in Facebook integriert" bei "Nativ Android-Apps" fügt ihr diesen Schlüssel ein. Dieser Schlüssel ist der Hashwert eurer Signatur der APP.

Solltet ihr auf einen ClassCastException mit String stoßen, müsst ihr aus param.getByteArray(key) param.getString(key).getBytes(). Ist bei mir jedenfals aufgetretten und das wollt ich euch nicht vorenthalten.

Der erste Schritt zu eigenen APP mit Facebook ist getan. Ich wünsch euch viel Erfolg!

regards
Alexander Fink

Keine Kommentare:

Kommentar veröffentlichen