[FIXED] Benutzerdefinierte Facebook-Anmeldeschaltfläche – Android

Ausgabe

Ich folge diesem Tutorial , aber bisher kann ich es nicht zum Laufen bringen, obwohl dies von vor etwa einem Jahr ist …

Ich verwende androidStudo 1.2.2 und FacebookSDK 4.

Ich möchte eine einfache Anmeldung bei Facebook mit einer benutzerdefinierten Schaltfläche, wie in diesem Bild gezeigt:

Beispiel

Nun, im Beispiel aus dem Tutorial habe ich Probleme mit der SessionVariable, es heißt, sie kann sie auch nicht auflösengetActivity()

Hat das noch niemand auf FacebookSDK4.0 ausprobiert?

Ist das ein richtiger Ansatz oder gibt es vielleicht etwas Aktuelleres?

Danke im Voraus!

Lösung

Schritt 1:
Fügen Sie zuerst FrameLayout hinzu und machen Sie die Facebook-Schaltfläche sichtbar (“gone”) und fügen Sie Ihre benutzerdefinierte Schaltfläche hinzu.
Vergessen Sie nicht,
xmlns:facebook="http://schemas.android.com/apk/res-auto"Ihr Hauptlayout einzugeben.

<FrameLayout
        android:id="@+id/FrameLayout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <com.facebook.login.widget.LoginButton
            android:id="@+id/login_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="gone" />

        <Button
            android:id="@+id/fb"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="#416BC1"
            android:onClick="onClick"
            android:text="FaceBook"
            android:textColor="#ffffff"
            android:textStyle="bold" />
    </FrameLayout>

Schritt 2:
Initialisieren Sie
FacebookSdk, onCreatebevor Sie das Layout umkehren.

FacebookSdk.sdkInitialize(this.getApplicationContext());

Schritt 3: Fügen Sie dies in Ihre Java-Datei ein.

callbackManager = CallbackManager.Factory.create();

fb = (Button) findViewById(R.id.fb);
loginButton = (LoginButton) findViewById(R.id.login_button);

List < String > permissionNeeds = Arrays.asList("user_photos", "email",
    "user_birthday", "public_profile", "AccessToken");
loginButton.registerCallback(callbackManager,
new FacebookCallback < LoginResult > () {@Override
    public void onSuccess(LoginResult loginResult) {

        System.out.println("onSuccess");

        String accessToken = loginResult.getAccessToken()
            .getToken();
        Log.i("accessToken", accessToken);

        GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(),
        new GraphRequest.GraphJSONObjectCallback() {@Override
            public void onCompleted(JSONObject object,
            GraphResponse response) {

                Log.i("LoginActivity",
                response.toString());
                try {
                    id = object.getString("id");
                    try {
                        URL profile_pic = new URL(
                            "http://graph.facebook.com/" + id + "/picture?type=large");
                        Log.i("profile_pic",
                        profile_pic + "");

                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    }
                    name = object.getString("name");
                    email = object.getString("email");
                    gender = object.getString("gender");
                    birthday = object.getString("birthday");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });
        Bundle parameters = new Bundle();
        parameters.putString("fields",
            "id,name,email,gender, birthday");
        request.setParameters(parameters);
        request.executeAsync();
    }

    @Override
    public void onCancel() {
        System.out.println("onCancel");
    }

    @Override
    public void onError(FacebookException exception) {
        System.out.println("onError");
        Log.v("LoginActivity", exception.getCause().toString());
    }
});

Schritt 4:
Vergessen Sie nicht, den folgenden Code hinzuzufügen.

@Override
protected void onActivityResult(int requestCode, int responseCode,
Intent data) {
    super.onActivityResult(requestCode, responseCode, data);
    callbackManager.onActivityResult(requestCode, responseCode, data);
}

Schritt 5:
Stellen Sie Ihren benutzerdefinierten Button-Klick auf FacebookLogin-Button-Klick ein.

public void onClick(View v) {
    if (v == fb) {
        loginButton.performClick();
    }
 }

Schritt 6:
Verwenden Sie dies, um sich programmgesteuert abzumelden.

LoginManager.getInstance().logOut();

Schritt 7: Sie können Benutzer nach Profil finden, die angemeldet sind oder nicht.

profile = Profile.getCurrentProfile().getCurrentProfile();
if (profile != null) {
    // user has logged in
} else {
    // user has not logged in
}


Beantwortet von –
Harvi Sirja


Antwort geprüft von –
Willingham (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like