所以,我有一个带有“分享”按钮的Dialog
。按下按钮时,如果用户已登录Facebook,则会调用共享用户信息的方法。但是,如果他们没有登录Facebook,我希望首先允许用户登录然后分享他们的信息。这是我尝试在没有LoginButton
的情况下登录用户:
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);
其中,PERMISSIONS
是:
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
问题是它永远不会登录!我要么收到一条Toast
消息,说明“检查你的网络连接”(即使我的网络连接正常)或没有任何反应。但是从日志中我可以看出Session永远不会打开。 总结一下:如何使用Session
课程正确登录Facebook?我在这里错过了什么?任何帮助,建议或建议将不胜感激,谢谢!
答案 0 :(得分:4)
我找到了SessionLoginSample
中Facebook SDK
位于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 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
方法:< / p>
openForRead
这就是他们真正的意思。虽然,我不知道为什么它完全有效,因为我使用方法openForPublish
而不是{{1}},但它似乎工作。我希望这证明对于遇到我遇到的同样问题的人有帮助。