Java 为登录创建Facebook会话的正确方法?
因此,我有一个带有“共享”按钮的Java 为登录创建Facebook会话的正确方法?,java,android,facebook,facebook-login,facebook-android-sdk,Java,Android,Facebook,Facebook Login,Facebook Android Sdk,因此,我有一个带有“共享”按钮的对话框。当按下按钮时,它会调用一个方法,如果用户已经登录到Facebook,该方法将共享用户信息。但是,如果他们没有登录Facebook,我希望它首先允许用户登录,然后共享他们的信息。下面是我尝试在不使用登录按钮的情况下登录用户的情况: Session.OpenRequest openRequest = new Session.OpenRequest(GameActivity.this); StatusCallbac
对话框。当按下按钮时,它会调用一个方法,如果用户已经登录到Facebook,该方法将共享用户信息。但是,如果他们没有登录Facebook,我希望它首先允许用户登录,然后共享他们的信息。下面是我尝试在不使用登录按钮的情况下登录用户的情况:
Session.OpenRequest openRequest = new Session.OpenRequest(GameActivity.this);
StatusCallback callback = new StatusCallback(){
@Override
public void call(Session session, SessionState state, Exception exception) {
Log.d(TAG, "CALL");
if (Session.getActiveSession() != null && Session.getActiveSession().isOpened()){
Log.d(TAG, "sendBrag was called");
sendBrag();
}else{
Log.d(TAG, "session is not opened");
}
if (exception != null){
Log.d(TAG, "caught exception in call method");
}
}
};
openRequest.setCallback(callback);
openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
openRequest.setPermissions(PERMISSIONS);
Session session = new Session(GameActivity.this);
session.openForPublish(openRequest);
Session.setActiveSession(session);
其中,权限
为:
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback statusCallback = new SessionStatusCallback();
private static final List PERMISSIONS=Arrays.asList(“publish_actions”);
问题是它从未登录!我要么收到一条“检查网络连接”(即使我的网络连接正常)的Toast
消息,要么什么也没发生。但从日志中我可以看出,会话从未打开过总而言之:如何使用会话
类正确登录Facebook?我错过了什么?任何帮助、建议或建议都将不胜感激,谢谢 我从Facebook SDK
的samples文件夹中的SessionLoginSample
中找到了问题的解决方案。首先,在我的活动中的onCreate
方法中,我放置了以下代码:
Session session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
}
if (session == null) {
session = new Session(this);
}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
}
}
其中statusCallback
为:
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback statusCallback = new SessionStatusCallback();
我的活动中的SessionStatusCallback
内部类是:
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened() && session != null){
sendBrag();
}
}
}//end of SessionStatusCallback class
然后,我创建了一个方法,用于在用户尚未登录时处理登录Facebook的问题:
private void onClickLogin() {
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
} else {
Session.openActiveSession(this, true, statusCallback);
}
}//end of onClickLogin() method
我通过“共享”按钮调用了它。最后,我认为代码中最重要的部分是onActivityResult()
方法(我相信这可能是我以前遇到错误的地方,因为我的代码中没有这个错误):
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}//end of onActivityResult() method
这就是他们真正想要的。尽管如此,我不知道为什么它完全有效,因为我使用了openForRead
方法而不是openForPublish
,但它似乎有效。我希望这能对那些与我遇到的问题相同的人有所帮助。我从Facebook SDK的samples文件夹中的SessionLoginSample
中找到了问题的解决方案。首先,在我的活动中的onCreate
方法中,我放置了以下代码:
Session session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
}
if (session == null) {
session = new Session(this);
}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
}
}
其中statusCallback
为:
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private Session.StatusCallback statusCallback = new SessionStatusCallback();
我的活动中的SessionStatusCallback
内部类是:
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened() && session != null){
sendBrag();
}
}
}//end of SessionStatusCallback class
然后,我创建了一个方法,用于在用户尚未登录时处理登录Facebook的问题:
private void onClickLogin() {
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback));
} else {
Session.openActiveSession(this, true, statusCallback);
}
}//end of onClickLogin() method
我通过“共享”按钮调用了它。最后,我认为代码中最重要的部分是onActivityResult()
方法(我相信这可能是我以前遇到错误的地方,因为我的代码中没有这个错误):
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}//end of onActivityResult() method
这就是他们真正想要的。尽管如此,我不知道为什么它完全有效,因为我使用了openForRead
方法而不是openForPublish
,但它似乎有效。我希望这能对那些和我有同样问题的人有所帮助