Android
Facebook SDK für Android
Suche…
Syntax
- newInstance : Zum Erstellen einer einzelnen Instanz der Facebook-Helper-Klasse.
- loginUser : Zum Anmelden des Benutzers.
- signOut : Zum Abmelden des Benutzers.
- getCallbackManager : Um Rückruf für Facebook zu erhalten.
- getLoginCallback : Um einen Rückruf für die Anmeldung zu erhalten.
- getKeyHash : Um Facebook Key Hash zu generieren.
Parameter
Parameter | Einzelheiten |
---|---|
ETIKETT | Ein String, der während der Protokollierung verwendet wird |
FacebookSignInHelper | Ein statischer Hinweis auf Facebook-Helfer |
CallbackManager | Ein Rückruf für Facebook-Operationen |
Aktivität | Ein Kontext |
PERMISSION_LOGIN | Ein Array, das alle erforderlichen Berechtigungen von Facebook für die Anmeldung enthält |
loginCallback | Ein Rückruf für Facebook-Login |
Wie füge ich Facebook-Login in Android hinzu?
Fügen Sie Ihrem build.gradle
folgende Abhängigkeiten build.gradle
// Facebook login
compile 'com.facebook.android:facebook-android-sdk:4.21.1'
Fügen Sie Ihrem Hilfsprogramm folgende Hilfsklasse hinzu:
/**
* Created by Andy
* An utility for Facebook
*/
public class FacebookSignInHelper {
private static final String TAG = FacebookSignInHelper.class.getSimpleName();
private static FacebookSignInHelper facebookSignInHelper = null;
private CallbackManager callbackManager;
private Activity mActivity;
private static final Collection<String> PERMISSION_LOGIN = (Collection<String>) Arrays.asList("public_profile", "user_friends","email");
private FacebookCallback<LoginResult> loginCallback;
public static FacebookSignInHelper newInstance(Activity context) {
if (facebookSignInHelper == null)
facebookSignInHelper = new FacebookSignInHelper(context);
return facebookSignInHelper;
}
public FacebookSignInHelper(Activity mActivity) {
try {
this.mActivity = mActivity;
// Initialize the SDK before executing any other operations,
// especially, if you're using Facebook UI elements.
FacebookSdk.sdkInitialize(this.mActivity);
callbackManager = CallbackManager.Factory.create();
loginCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// You are logged into Facebook
}
@Override
public void onCancel() {
Log.d(TAG, "Facebook: Cancelled by user");
}
@Override
public void onError(FacebookException error) {
Log.d(TAG, "FacebookException: " + error.getMessage());
}
};
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* To login user on facebook without default Facebook button
*/
public void loginUser() {
try {
LoginManager.getInstance().registerCallback(callbackManager, loginCallback);
LoginManager.getInstance().logInWithReadPermissions(this.mActivity, PERMISSION_LOGIN);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* To log out user from facebook
*/
public void signOut() {
// Facebook sign out
LoginManager.getInstance().logOut();
}
public CallbackManager getCallbackManager() {
return callbackManager;
}
public FacebookCallback<LoginResult> getLoginCallback() {
return loginCallback;
}
/**
* Attempts to log debug key hash for facebook
*
* @param context : A reference to context
* @return : A facebook debug key hash
*/
public static String getKeyHash(Context context) {
String keyHash = null;
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(),
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
keyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
Log.d(TAG, "KeyHash:" + keyHash);
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return keyHash;
}
}
Fügen Sie den folgenden Code in Ihre Aktivität ein:
FacebookSignInHelper facebookSignInHelper = FacebookSignInHelper.newInstance(LoginActivity.this, fireBaseAuthHelper);
facebookSignInHelper.loginUser();
Fügen Sie folgenden Code zu Ihrem OnActivityResult
:
facebookSignInHelper.getCallbackManager().onActivityResult(requestCode, resultCode, data);
Festlegen von Berechtigungen für den Zugriff auf Daten aus dem Facebook-Profil
Wenn Sie die Details eines Facebook-Profils eines Benutzers abrufen möchten, müssen Sie Berechtigungen für dieses Profil festlegen:
loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("email", "user_about_me"));
Sie können weitere Berechtigungen hinzufügen, z. B. Freunde, Beiträge, Fotos usw. Wählen Sie einfach die richtige Berechtigung aus und fügen Sie sie der obigen Liste hinzu.
Hinweis: Sie müssen keine expliziten Berechtigungen für den Zugriff auf das öffentliche Profil festlegen (Vorname, Nachname, ID, Geschlecht usw.).
Erstellen Sie Ihren eigenen benutzerdefinierten Button für das Facebook-Login
Nachdem Sie das Facebook-Login / die Anmeldung zum ersten Mal hinzugefügt haben, sieht die Schaltfläche etwa so aus:
In den meisten Fällen passt es nicht zu den Design-Spezifikationen Ihrer App. Und so können Sie es anpassen:
<FrameLayout
android:layout_below="@+id/no_network_bar"
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:background="#3B5998"
android:layout_width="match_parent"
android:layout_height="60dp"
android:id="@+id/fb"
android:onClick="onClickFacebookButton"
android:textAllCaps="false"
android:text="Sign up with Facebook"
android:textSize="22sp"
android:textColor="#ffffff" />
</FrameLayout>
com.facebook.login.widget.LoginButton
einfach den ursprünglichen com.facebook.login.widget.LoginButton
in ein FrameLayout
und machen Sie seine Sichtbarkeit verloren.
FrameLayout
Sie anschließend Ihre benutzerdefinierte Schaltfläche in demselben FrameLayout
. Ich habe einige Beispielspezifikationen hinzugefügt. Sie können jederzeit einen eigenen Hintergrund für die Facebook-Schaltfläche erstellen und als Hintergrund für die Schaltfläche festlegen.
Als letztes konvertieren Sie einfach den Klick auf meinen benutzerdefinierten Button in einen Klick auf den Facecbook-Button:
//The original Facebook button
LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);
//Our custom Facebook button
fb = (Button) findViewById(R.id.fb);
public void onClickFacebookButton(View view) {
if (view == fb) {
loginButton.performClick();
}
}
Großartig! Nun sieht der Button so aus:
Ein minimalistischer Leitfaden für die Facebook-Anmeldung / Anmeldung
Sie müssen die Voraussetzungen festlegen.
Fügen Sie die Facebook-Aktivität zur Datei AndroidManifest.xml hinzu :
<activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" />
Fügen Sie der XML-Layoutdatei die Anmeldeschaltfläche hinzu:
<com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Jetzt haben Sie den Facebook-Button. Wenn der Benutzer darauf klickt, wird der Facebook-Anmeldedialog oben auf dem Bildschirm der App angezeigt. Hier kann der Benutzer seine Anmeldeinformationen eingeben und auf die Schaltfläche Anmelden klicken. Wenn die Anmeldeinformationen korrekt sind, erteilt das Dialogfeld die entsprechenden Berechtigungen und ein Rückruf wird an Ihre ursprüngliche Aktivität gesendet, die die Schaltfläche enthält. Der folgende Code zeigt, wie Sie diesen Rückruf erhalten können:
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // Completed without error. You might want to use the retrieved data here. } @Override public void onCancel() { // The user either cancelled the Facebook login process or didn't authorize the app. } @Override public void onError(FacebookException exception) { // The dialog was closed with an error. The exception will help you recognize what exactly went wrong. } });
Abmeldung von Facebook
Facebook SDK 4.0 oder höher, so loggen wir uns aus:
com.facebook.login.LoginManager.getInstance().logOut();
Bei Versionen vor 4.0 wird das Abmelden durch das explizite Löschen des Zugriffstokens aufgehoben:
Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();