Android
Facebook SDK для Android
Поиск…
Синтаксис
- newInstance : создать отдельный экземпляр класса помощника Facebook.
- loginUser : Войти в систему.
- signOut : выйти из системы.
- getCallbackManager : для получения обратного вызова для Facebook.
- getLoginCallback : для получения обратного вызова для входа.
- getKeyHash : генерировать Facebook-хеш.
параметры
параметр | подробности |
---|---|
ТЕГ | Строка, используемая при регистрации |
FacebookSignInHelper | Статическая ссылка на помощника facebook |
CallbackManager | Обратный вызов для операций с facebook |
Деятельность | Контекст |
PERMISSION_LOGIN | Массив, содержащий все разрешения, необходимые для входа в систему для входа в facebook. |
loginCallback | Обратный вызов для входа в facebook |
Как добавить Facebook Войти в Android
Добавьте ниже зависимости от вашего build.gradle
// Facebook login
compile 'com.facebook.android:facebook-android-sdk:4.21.1'
Добавьте ниже вспомогательный класс в ваш служебный пакет:
/**
* 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;
}
}
Добавьте в свою команду код ниже:
FacebookSignInHelper facebookSignInHelper = FacebookSignInHelper.newInstance(LoginActivity.this, fireBaseAuthHelper);
facebookSignInHelper.loginUser();
Добавьте ниже код в свой OnActivityResult
:
facebookSignInHelper.getCallbackManager().onActivityResult(requestCode, resultCode, data);
Настройка разрешений для доступа к данным из профиля Facebook
Если вы хотите получить информацию о профиле пользователя в Facebook, вам необходимо установить разрешения для него:
loginButton = (LoginButton)findViewById(R.id.login_button);
loginButton.setReadPermissions(Arrays.asList("email", "user_about_me"));
Вы можете добавлять дополнительные разрешения, такие как список друзей, сообщения, фотографии и т. Д. Просто выберите правильное разрешение и добавьте его в приведенный выше список.
Примечание. Вам не нужно устанавливать какие-либо явные разрешения для доступа к общедоступному профилю (имя, фамилия, идентификатор, пол и т. Д.).
Создайте свою собственную кнопку для входа в Facebook
После того, как вы впервые добавите логин / регистрацию в Facebook, кнопка выглядит примерно так:
В большинстве случаев это не соответствует дизайнерским спецификациям вашего приложения. И вот как вы можете настроить его:
<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
в FrameLayout
и FrameLayout
его видимость.
Затем добавьте свою настраиваемую кнопку в тот же FrameLayout
. Я добавил некоторые образцы спецификаций. Вы всегда можете сделать свой собственный рисованный фон для кнопки facebook и установить его в качестве фона кнопки.
Последнее, что мы делаем, - это просто щелкнуть мышью по моей пользовательской кнопке, нажав на кнопку facecbook:
//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();
}
}
Большой! Теперь кнопка выглядит примерно так:
Минималистическое руководство по внедрению Facebook / регистрации
Вы должны настроить предварительные условия .
Добавьте активность Facebook в файл AndroidManifest.xml :
<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" />
Добавьте кнопку входа в свой XML-файл макета:
<com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Теперь у вас есть кнопка Facebook. Если пользователь нажмет на него, окно входа в систему Facebook появится поверх экрана приложения. Здесь пользователь может заполнить свои учетные данные и нажать кнопку « Вход» . Если учетные данные верны, диалог предоставляет соответствующие разрешения, и обратный вызов отправляется в исходное действие, содержащее кнопку. Следующий код показывает, как вы можете получить этот обратный вызов:
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. } });
Выход из Facebook
Facebook SDK 4.0 и далее, вот как мы выходим из системы:
com.facebook.login.LoginManager.getInstance().logOut();
Для версий до версии 4.0 выход из системы пропадает, явно очистив токен доступа:
Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();