수색…


통사론

  • newInstance : Facebook 헬퍼 클래스의 단일 인스턴스를 생성합니다.
  • loginUser : 사용자 로그인.
  • signOut : 사용자를 로그 아웃합니다.
  • getCallbackManager : 페이스 북의 콜백을 얻으려면.
  • getLoginCallback : 로그인 콜백을 얻으려면.
  • getKeyHash : Facebook 키 해시를 생성합니다.

매개 변수

매개 변수 세부
꼬리표 로그하는 동안 사용 된 문자열
FacebookSignInHelper 페이스 북 도우미에 대한 정적 참조
CallbackManager 페이스 북 운영을위한 콜백
활동 문맥
PERMISSION_LOGIN 페이스 북에서 로그인하는 데 필요한 모든 권한이 포함 된 배열입니다.
loginCallback 페이스 북 로그인 콜백

Android에 Facebook 로그인을 추가하는 방법

build.gradle 아래의 의존성을 추가하십시오 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"));

친구 목록, 게시물, 사진 등의 권한을 계속 추가 할 수 있습니다. 바로 위 의 권한을 선택하고 위 목록에 추가하십시오.

참고 : 공개 프로필 (이름, 성, ID, 성별 등)에 액세스하기위한 명시 적 권한을 설정할 필요가 없습니다.

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.LoginButtoncom.facebook.login.widget.LoginButton 에 랩핑하고 가시성을 FrameLayout .

그런 다음 동일한 FrameLayout 에 사용자 정의 단추를 추가하십시오. 몇 가지 샘플 사양을 추가했습니다. 당신은 항상 페이 스북 버튼에 대한 자신의 drawable 배경을 만들고 버튼의 배경으로 설정할 수 있습니다.

마지막으로 내 맞춤 검색 버튼 클릭을 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 로그인 / 가입 구현에 대한 최소한의 가이드

  1. 필수 구성 요소 를 설치해야합니다.

  2. AndroidManifest.xml 파일에 Facebook 활동을 추가하십시오.

    <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" />
    
  3. 레이아웃 XML 파일에 로그인 버튼을 추가하십시오.

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />   
    
  4. 이제 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.
        }
    });  
    

페이스 북에서 로그 아웃하기

페이스 북 SDK 4.0 이후, 우리가 로그 아웃하는 방법입니다 :

com.facebook.login.LoginManager.getInstance().logOut();

4.0 이전 버전의 경우 액세스 토큰을 명시 적으로 지워서 로그 아웃하지 않았습니다.

Session session = Session.getActiveSession();
session.closeAndClearTokenInformation();


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow