Android 中的 Facebook SDK v4 使用强制权限登录

Facebook SDK v4 in Android Login with Mandatory Permissions

我想在 android 中使用 facebook sdk v4 登录用户。在我的模型中,如果 facebook 用户没有启用某些权限,他们将无法登录。

private static final List<String> FACEBOOK_PERMISSIONS = Arrays.asList("public_profile", "email");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    callbackManager = CallbackManager.Factory.create();


    loginButtonFacebook.setReadPermissions(FACEBOOK_PERMISSIONS);


    loginButtonFacebook.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        loginType = Constant.LOGIN_FACEBOOK;
        if (loginResult.getAccessToken().getPermissions().containsAll(FACEBOOK_PERMISSIONS)) {
            accessToken = loginResult.getAccessToken().getToken();
            expirationDate = loginResult.getAccessToken().getExpires();
            onValidationSucceeded();
        } else {
            LoginManager.getInstance().logOut();
        }

    }
}

我面临的问题是,如果我注销用户(就像在代码中一样,因为他没有启用某些权限),然后我尝试使用 facebook 再次登录,facebook 不要求权限再次,它打开和关闭 facebook activity。有办法吗?

谢谢

这是我找到的解决方案

activity_login.xml

中的自定义 Facebook 按钮
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/btn_login_facebook"
            android:layout_width="fill_parent"
            android:layout_height="50dp"
            android:clickable="true"
            android:background="@drawable/blue_button"
            android:gravity="center"
            android:layout_marginTop="20dp"
            >

    <TextView
        android:id="@+id/id_view_row_click_text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/txt_login_with"
        android:textColor="@android:color/white"
        android:background="@android:color/transparent"

        android:duplicateParentState="true"
        android:textSize="18dp" />

    <TextView
        android:id="@+id/id_view_row_click_text2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:text="@string/txt_facebook"
        android:background="@android:color/transparent"
        android:textStyle="bold"
        android:duplicateParentState="true"
        android:textSize="18dp" />

</LinearLayout>

相关代码在LoginActivity.java

private static final List<String> FACEBOOK_PERMISSIONS = Arrays.asList("public_profile", "email");

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());
    callbackManager = CallbackManager.Factory.create();

    setContentView(R.layout.activity_login);

    ButterKnife.inject(this);

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            loginType = Constant.LOGIN_FACEBOOK;
            if (loginResult.getAccessToken().getPermissions().containsAll(FACEBOOK_PERMISSIONS)) {
                accessToken = loginResult.getAccessToken().getToken();
                expirationDate = loginResult.getAccessToken().getExpires();
                onValidationSucceeded();
            }

        }

        @Override
        public void onCancel() {
            // App code
            Log.i(TAG, "CANCEL FACEBOOK");
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.i(TAG, exception.getMessage());
        }
    });

}


@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

@OnClick(R.id.btn_login_facebook)
public void onFacebookClick(View view) {
    LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, FACEBOOK_PERMISSIONS);
}

代码可能会更好,但对我有用。 希望对其他人有帮助