簡體   English   中英

Facebook SDK LoginButton到自定義Button Android

[英]Facebook SDK LoginButton to custom Button Android

我想將Facebook登錄對話框集成到活動中。 如果按下自定義按鈕,則該應用程序必須通過Facebook登錄(如果之前輸入了用戶名和密碼,則必須自動登錄)。 我設法通過在活動中添加LoginButton來做到這一點,但是我想覆蓋它的功能。 如果用戶單擊該按鈕,將執行LoginButton后面的操作。

我需要這樣做是因為我想先驗證設備是否具有有效的互聯網連接,但是在我的實現中,該應用嘗試使用Facebook登錄,然后顯示“無互聯網連接”的警報對話框。

這是我的活動。 當我單擊authButton時,Facebook登錄開始,即使在onClickListener中未設置任何操作。

公共類LoginActivity {

private Activity mActivity;
private User userR;

private static final String TAG = "Login";
private UiLifecycleHelper uiHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    mActivity = this;

    LoginButton authButton = (LoginButton) findViewById(R.id.authButton1);
    authButton.setReadPermissions(Arrays.asList("public_profile", "email"));
    authButton.setOnClickListener(onClickListener);
    authButton.setText("Connect with Facebook");
    authButton.setBackgroundResource(R.drawable.button_facebook);
    authButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);

    uiHelper = new UiLifecycleHelper(mActivity, callback);
    uiHelper.onCreate(savedInstanceState);

}

private OnClickListener onClickListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.authButton1:
            break;
        }
    }
};

@Override
protected void onStart() {
    super.onStart();

}

@Override
public void onBackPressed() {

}

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (state.isOpened()) {
        Log.i(TAG, "Logged in...");
    } else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        onSessionStateChange(session, state, exception);
    }
};

@Override
public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if (session != null && (session.isOpened() || session.isClosed())) {
        onSessionStateChange(session, session.getState(), null);
    }
    uiHelper.onResume();

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(mActivity, requestCode, resultCode, data);
    userR = new User();

    if (Session.getActiveSession().isOpened()) {
        // Request user data and show the results
        Request.newMeRequest(Session.getActiveSession(), new GraphUserCallback() {
            @Override
            public void onCompleted(GraphUser user, Response response) {
                if (null != user) {
                    //getting email, name, gender
                }
                login();

            }
        }).executeAsync();

    }
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    Session.getActiveSession().closeAndClearTokenInformation();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

public void login() {
    //login to server with data fetched from Graph user
}

這是LoginButton com.facebook.widget.LoginButton的XML

        android:id="@+id/authButton1"
        android:layout_width="match_parent"
        android:layout_height="36dp"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="30dp"
        fb:login_text="Connect with Facebook"
        fb:logout_text="Connect with Facebook"

LoginButton上的setOnClickListener被覆蓋,因此您不會意外替換它,而是代理完成登錄處理后設置的偵聽器。

如果沒有互聯網連接,則應考慮完全禁用或隱藏按鈕,而不要等到用戶單擊它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM