在 Android 中使用自定义登录按钮时如何设置 Facebook 登录权限
How to set Facebook login permissions when using a custom login button in Android
我正在按照本指南在我的 Android 应用程序中通过 Facebook 设置社交登录:https://developers.facebook.com/docs/facebook-login/android/permissions
使用 Facebook LoginButton
设置回调来处理用户身份验证结果很容易:
facebookCallbackManager = CallbackManager.Factory.create();
final LoginButton facebookLoginButton = findViewById(R.id.facebook);
facebookLoginButton.setReadPermissions(Collections.singletonList(EMAIL));
LoginManager.getInstance().registerCallback(facebookCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
final String accessToken = loginResult.getAccessToken().getToken();
...
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
但是当我将 LoginButton
与其他 Android 按钮交换时,我无法再使用 setReadPermissions
功能。
我的问题是:使用自定义登录按钮时如何从 Facebook 请求用户的电子邮件权限?
在您的自定义按钮上添加 onClickListener
并在 onClick
中调用 LoginManager
上的 logInWithReadPermissions
方法。此方法接受用户请求的权限列表。
完整示例:
facebookCallbackManager = CallbackManager.Factory.create();
final MyFacebookButton facebookLoginButton = findViewById(R.id.facebook);
LoginManager.getInstance().registerCallback(facebookCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
...
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
facebookLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager
.getInstance()
.logInWithReadPermissions(
LoginActivity.this,
Collections.singletonList(EMAIL)
);
}
});
private CallbackManager mCallbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("Success", "Login");
}
@Override
public void onCancel() {
Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
}
});
setContentView(R.layout.activity_main);
Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login);
btn_fb_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
super.onActivityResult(requestCode, resultCode, data);
if(mCallbackManager.onActivityResult(requestCode, resultCode, data)) {
return;
}
}
我正在按照本指南在我的 Android 应用程序中通过 Facebook 设置社交登录:https://developers.facebook.com/docs/facebook-login/android/permissions
使用 Facebook LoginButton
设置回调来处理用户身份验证结果很容易:
facebookCallbackManager = CallbackManager.Factory.create();
final LoginButton facebookLoginButton = findViewById(R.id.facebook);
facebookLoginButton.setReadPermissions(Collections.singletonList(EMAIL));
LoginManager.getInstance().registerCallback(facebookCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
final String accessToken = loginResult.getAccessToken().getToken();
...
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
但是当我将 LoginButton
与其他 Android 按钮交换时,我无法再使用 setReadPermissions
功能。
我的问题是:使用自定义登录按钮时如何从 Facebook 请求用户的电子邮件权限?
在您的自定义按钮上添加 onClickListener
并在 onClick
中调用 LoginManager
上的 logInWithReadPermissions
方法。此方法接受用户请求的权限列表。
完整示例:
facebookCallbackManager = CallbackManager.Factory.create();
final MyFacebookButton facebookLoginButton = findViewById(R.id.facebook);
LoginManager.getInstance().registerCallback(facebookCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
...
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
}
});
facebookLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager
.getInstance()
.logInWithReadPermissions(
LoginActivity.this,
Collections.singletonList(EMAIL)
);
}
});
private CallbackManager mCallbackManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d("Success", "Login");
}
@Override
public void onCancel() {
Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException exception) {
Toast.makeText(MainActivity.this, exception.getMessage(), Toast.LENGTH_LONG).show();
}
});
setContentView(R.layout.activity_main);
Button btn_fb_login = (Button)findViewById(R.id.btn_fb_login);
btn_fb_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
super.onActivityResult(requestCode, resultCode, data);
if(mCallbackManager.onActivityResult(requestCode, resultCode, data)) {
return;
}
}