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);
}
代码可能会更好,但对我有用。
希望对其他人有帮助
我想在 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);
}
代码可能会更好,但对我有用。 希望对其他人有帮助