gpt4 book ai didi

android - facebook 登录无法将发布或管理权限(电子邮件)传递给读取授权请求

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:00:29 25 4
gpt4 key购买 nike

我有一个按钮点击登录 facebook,但有时这段代码不起作用。抛出异常:引起:

com.facebook.FacebookException: Cannot pass a publish or manage permission (email) to a request for read authorization

这是我的 Activity 代码:

public class FacebookLoginActivity extends Activity {

private final static String TAG="FB";

private static final List<String> PERMISSIONS=Arrays.asList("email", "user_likes", "user_status");

private Session.StatusCallback statusCallback=new SessionStatusCallback();

private GraphUser user = null;

private Bundle bundle;

private Intent myIntent;

private Session session;

private static FacebookLoginActivity instance=new FacebookLoginActivity();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(bundle==null){
bundle=new Bundle();
}
Log.v(TAG, "in FB onCreate method");
myIntent = this.getIntent();
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
String action = ClientUtil.getElementValue("action");

Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
session=openActiveSession(this, true, PERMISSIONS);
onClickLogin();
}



public void onClickLogin() {
Log.v(TAG, "click login btn");
session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
OpenRequest openRequest=new Session.OpenRequest(this);
openRequest.setPermissions(PERMISSIONS);
openRequest.setCallback(statusCallback);
openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
session.openForPublish(openRequest);
} else {
Log.v(TAG, "open active session");
Session.openActiveSession(this, true, statusCallback);
}
}

@Override
public void onStart() {
super.onStart();
Log.v(TAG, "onStart method to add fb Callback");
Session.getActiveSession().addCallback(statusCallback);
}

@Override
public void onStop() {
super.onStop();
Log.v(TAG, "onStop method to remove fb callback");
Session.getActiveSession().removeCallback(statusCallback);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v(TAG, "onActivityResult method to call Fb Session");
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Session session=Session.getActiveSession();
Session.saveSession(session, outState);
}

private static Session openActiveSession(Activity activity, boolean allowLoginUI, List<String> permissions) {
OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions);
Session session = new Session.Builder(activity).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
Session.setActiveSession(session);
session.openForPublish(openRequest);
return session;
}
return null;
}

private class SessionStatusCallback implements Session.StatusCallback {

@Override
public void call(Session session, SessionState state, Exception exception) {
Log.v(TAG, "in StatusCallback call method exception is:"+ exception);
Log.v(TAG, "session state is:"+session.isOpened());
if(user != null) {
Log.v(TAG, "fb user is exist todo login yyy");
login();
finish();
Log.v(TAG, "finish fb activity");
return;
}
if(session.isOpened()) {
Log.v(TAG, "session is opened to call FB Request");
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

@Override
public void onCompleted(GraphUser me, Response response) {
Log.v(TAG, "in GraphUserCallback onCompleted method");
Log.v(TAG, "GraphUser has value:"+(user!=null));
if(me != null) {
user=me;
login();
}
finish();
Log.v(TAG, "finish fb activity");
}
});
}else{
Log.v(TAG, "session is not open");
if(exception !=null && exception.toString().contains("Canceled")){
Log.v(TAG, "cancle login");
bundle.putInt("code", RespondCode.CANCLE);
myIntent.putExtras(bundle);
setResult(Activity.RESULT_OK, myIntent);
finish();
}
}
}
}
}

最佳答案

除非您的应用已先获得基本权限,否则您不能调用 openForPublish。

将您的 PERMISSIONS 列表分成 PERMISSIONS_READ 和 PERMISSIONS_PUBLISH,并将“email”放入 PUBLISH 端。然后调用 openForRead,然后在 session 打开时请求 NewPublishPermissions。

关于android - facebook 登录无法将发布或管理权限(电子邮件)传递给读取授权请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15153312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com