Facebook SDK集成之登錄篇

前情概要

  1. Facebook SDK集成之綱要篇
  2. Facebook SDK集成之準備篇

集成環境

github上的環境說明有點瑕疵, 在Wosao/readme上做了更正。本地集成環境如下:
1. AndroidStudio 1.4.1
2. Facebook SDK 4.6.0
3. Gradle 2.2
4. OS Win10

目標

本作代碼 使用 git checkout -f Myddev-05-LoginManager 獲得

本作是其中的第三篇,Facebook SDK 提供2種方法供你登錄:

  • LoginButton class - 提供登錄button, 你可以添加到自己的UI中,使用當前access token 並且可以登錄,登出!
  • LoginManager class - 不使用UI 元素來初始化登錄!

通過閱讀本作,您可以獲得:
1. LoginButton方式登錄
2. LoginManager方式登錄

LoginButton登錄

  • 首先在act_layout中添加自帶的button 元素。

    <LinearLayout
            android:id="@+id/ll_social_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_above="@+id/rl_home_bottom_container"
            android:layout_marginBottom="30dp">
    
            <com.facebook.login.widget.LoginButton
                android:id="@+id/login_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal" />

    其中com.facebook.login.widget.LoginButton就是facebook提供的UI控件, 可以添加android其他屬性。

  • 其次需要在HomeActivityTest.java中實現登錄步驟

    1.在Applicaion中初始化facebook sdk, 官方推薦的方法。

    public void onCreate() {
            super.onCreate();
            FacebookSdk.sdkInitialize(getApplicationContext());
        }

    不要忘記在AndroidManifest.xml中 application標籤下添加 android:name=".MyApplication"

    2.定義LoginButton & CallbackManager對象

        private LoginButton loginButton;
        private CallbackManager callbackManager;

    3.在onCreate中實例化對象

     protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ...
            //獲得callbackmanager
            callbackManager = CallbackManager.Factory.create();
            setContentView(R.layout.act_home);
            ... ...
            //獲得loginButton
            loginButton = (LoginButton) findViewById(R.id.login_button);
            if (loginButton == null) {
                  return;
            }
        ... ...
     }

    4.設置讀取權限以及註冊回調

    loginButton.setReadPermissions(Arrays.asList("public_profile", "user_friends", "email", "user_birthday"));
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
          @Override
          public void onSuccess(LoginResult loginResult) {
               Log.e(TAG, "onSuccess --------");
          }
    
          @Override
          public void onCancel() {
              Log.e(TAG, "onCancel");
          }
    
          @Override
          public void onError(FacebookException exception) {
              Log.e(TAG, "onError: " + exception.getMessage() + "\n " + exception.toString());
          }
    });

    5.重寫onActivityResult

    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            Log.e(TAG, "request: " + requestCode + ",  resultCode: " + resultCode
                    + ", data: " + data.toString());
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }

LoginManager登錄

爲實現本地Button登錄facebook, 這裏僅僅添加了幾個步驟。

  • 首先在act_layout中添加本地Button 元素。

                <Button
                android:id="@+id/login_button_local"
                android:layout_width="wrap_content"
                android:layout_height="40dp"
                android:text="@string/local_login_button"
                android:layout_gravity="center_horizontal"
                />
  • 其次,在HomeActivityTest.java中添加

    //本地 Button Login
    private Button localLoginButton;

    在onCreate()

            //第二種方式(LoginManager)登錄facebook
            localLoginButton = (Button)findViewById(R.id.login_button_local);
            localLoginButton.setOnClickListener(this);
  • 最後,在onClick()中調用函數localLogin 實現登錄以及回調處理

        private void localLogin() {
            LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile",
                    "user_friends", "email", "user_birthday"));
            //LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
    
            LoginManager.getInstance().registerCallback(callbackManager,
                    new FacebookCallback<LoginResult>() {
                        @Override
                        public void onSuccess(LoginResult loginResult) {
                            // App code
                            Log.e(TAG, "LocalLogin - onSuccess --------" + loginResult.getAccessToken());
                            Toast.makeText(getApplicationContext(), "Login in Success!!!", Toast.LENGTH_LONG).show();
                        }
    
                        @Override
                        public void onCancel() {
                            // App code
                            Log.e(TAG, "LocalLogin - onCancel");
                            Toast.makeText(getApplicationContext(), "Login in Cancel!!!", Toast.LENGTH_LONG).show();
                        }
    
                        @Override
                        public void onError(FacebookException exception) {
                            // App code
                            Log.e(TAG, "LocalLogin - onError: " + exception.getMessage()
                                    + "\n " + exception.toString());
    
                            Toast.makeText(getApplicationContext(),
                                    "Login in Error: " + exception.getMessage() + "\n " + exception.toString(), Toast.LENGTH_LONG).show();
                        }
                    });
        }

    記得onActivityResult重寫是必須的!上文已說明,這裏不列舉!

sample運行效果

Wosao運行效果

其中紅框內容,是本文的實現重點, 上半部分是分享的步驟!

發佈了57 篇原創文章 · 獲贊 17 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章