最初我的代码完美无缺。然后昨天我意识到通过Facebook按钮登录,setReadPermissions仅询问公开个人资料,忽略电子邮件,朋友列表....如果此代码完美运行,我还有另一个项目。你知道告诉我为什么吗?
这是我的代码的一部分:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(this.getApplicationContext());
...
callbackManager = CallbackManager.Factory.create();
facebook();
...
}
private void facebook(){
facebookLoginButton = (LoginButton) findViewById(R.id.fb_login_button);
facebookLoginButton.setReadPermissions(Arrays.asList("public_profile,email,user_friends,user_birthday"));
getLoginDetails(facebookLoginButton);
}
protected void getLoginDetails(final LoginButton login_button) {
// Callback registration
login_button.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult login_result) {
final Profile profile = Profile.getCurrentProfile();
GraphRequest request = GraphRequest.newMeRequest(
login_result.getAccessToken(),
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
try {
System.out.println("Questo è l'object"+object);
System.out.println("Questo è il response"+response);
System.out.println("Questo è il Nome"+object.getString("name"));
System.out.println("Questo è il id"+object.getString("id"));
System.out.println("Questo è il email"+object.getString("email"));
} catch (JSONException e) {
e.printStackTrace();
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name, birthday,picture,email");
request.setParameters(parameters);
request.executeAsync();
}
@Override
public void onCancel() {
// code for cancellation
}
@Override
public void onError(FacebookException exception) {
// code to handle error
}
});
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken,AccessToken currentAccessToken) {
// Set the access token using
// currentAccessToken when it's loaded or set.
//System.out.println("Questo è accesso token "+currentAccessToken);
System.out.println("Questo è accesso OLDtoken "+oldAccessToken);
}
};
// If the access token is available already assign it.
accessToken = AccessToken.getCurrentAccessToken();
System.out.println("Questo è accesso token "+accessToken);
}
在其他项目中,此代码完美无缺。我认为这是一个Facebook应用程序问题,权限问题,但我的管理员帐户,它只让我公开个人资料。请帮帮我。
答案 0 :(得分:0)
好的,我知道这已经过时了,但您只使用一个参数传递数组作为列表。
facebookLoginButton.setReadPermissions(Arrays.asList("public_profile,email,user_friends,user_birthday"));
不知道为什么facebook甚至会理解第一个元素。 Instaed你应该使用这个:
facebookLoginButton.setReadPermissions(Arrays.asList("email", /*etc as a string permissions*/,"user_birthday"));
答案 1 :(得分:0)
我遇到了同样的问题,但是我发现创建按钮时就像
private Button loginButton;
但应该是
private LoginButton loginButton;
,您的情况是Facebook Button。