请求电子邮件登录 facebook 总是像无休止的循环一样请求许可
Requesting email for facebook login always ask for permission like an endless loop
我已经实现了一个 facebook 登录,具有获取用户电子邮件的特殊权限。它确实有效,但问题是它还创建了调用权限的无限循环,我不知道该怎么做了。这是我的代码:
public void loginWithFacebook(View view) {
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
try {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, Arrays.asList("email"));
session.requestNewReadPermissions(newPermissionsRequest);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// make request to the /me API
Request request = Request.newMeRequest(session,
new Request.GraphUserCallback() {
// callback after Graph API response with user
// object
@Override
public void onCompleted(GraphUser user, Response response) {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
if (user != null) {
try {
if (Utils.isValidEmail(user.asMap().get("email").toString())) {
Toast.makeText(getBaseContext(),user.asMap().get("email").toString(),Toast.LENGTH_SHORT).show();
} else {
//SHOW TOAST NO EMAIL
}
}catch (Exception e){}
}
}
});
Request.executeBatchAsync(request);
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
出现的情况是它一直说您已经多次授权该应用程序。
您的 statusCallback 将继续被调用以用于会话状态的任何后续更改(因此当您获得电子邮件权限时,它将再次被调用),这就是您进入无限循环的原因。我建议在进一步请求之前检查您是否已经拥有电子邮件权限:
try {
if (!session.getPermissions().contains("email")) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, Arrays.asList("email"));
session.requestNewReadPermissions(newPermissionsRequest);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我已经实现了一个 facebook 登录,具有获取用户电子邮件的特殊权限。它确实有效,但问题是它还创建了调用权限的无限循环,我不知道该怎么做了。这是我的代码:
public void loginWithFacebook(View view) {
Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
try {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, Arrays.asList("email"));
session.requestNewReadPermissions(newPermissionsRequest);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// make request to the /me API
Request request = Request.newMeRequest(session,
new Request.GraphUserCallback() {
// callback after Graph API response with user
// object
@Override
public void onCompleted(GraphUser user, Response response) {
if (progressDialog.isShowing()) {
progressDialog.dismiss();
}
if (user != null) {
try {
if (Utils.isValidEmail(user.asMap().get("email").toString())) {
Toast.makeText(getBaseContext(),user.asMap().get("email").toString(),Toast.LENGTH_SHORT).show();
} else {
//SHOW TOAST NO EMAIL
}
}catch (Exception e){}
}
}
});
Request.executeBatchAsync(request);
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
出现的情况是它一直说您已经多次授权该应用程序。
您的 statusCallback 将继续被调用以用于会话状态的任何后续更改(因此当您获得电子邮件权限时,它将再次被调用),这就是您进入无限循环的原因。我建议在进一步请求之前检查您是否已经拥有电子邮件权限:
try {
if (!session.getPermissions().contains("email")) {
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, Arrays.asList("email"));
session.requestNewReadPermissions(newPermissionsRequest);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}