我正在尝试使用sdk 3.0在Facebook
上发布图片,但我遇到了一些问题。如果我关闭应用程序并重新打开应用程序它总是进入其他条件,然后它进入条件。我是否需要保存session
或已存储的?
Session mSession = Session.getActiveSession();
if (mSession != null
&& mSession.getPermissions().contains("publish_actions")) {
postPhoto();
} else {
if (mSession == null) {
Log.d("Facebook", "Session null");
mSession = new Session.Builder(this).setApplicationId(
"xxxxxxxxxxxxxxx").build();
Session.setActiveSession(mSession);
}
if (!mSession.isOpened()) {
Log.d("Facebook", "Session not opened");
Session.OpenRequest sessionRequest = new Session.OpenRequest(
this);
sessionRequest.setPermissions(PERMISSIONS);
sessionRequest.setCallback(statuscallback);
sessionRequest
.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
mSession.openForPublish(sessionRequest);
}
}
StatusCallback statuscallback = new StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
// TODO Auto-generated method stub
if (session.isOpened()) {
Log.d("Facebook", "Logged in");
postPhoto();
}
if (session.isClosed()) {
Log.d("Facebook", "Logged out");
}
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
Log.d("Facebook", "onActivity Result");
}
如果我需要注销用户怎么办?
我尝试了以下代码onDestroy()
if (mSession.isOpened())
mSession.closeAndClearTokenInformation();
每当我下次打开应用程序时,如果我在destroy方法中使用上面的代码,它总会在此行引发错误
mSession.openForPublish(sessionRequest);
请帮帮我们。答案/建议非常值得注意。
由于
答案 0 :(得分:0)
您可以使用UiLifecycleHelper来帮助管理整个活动或片段生命周期中的活动会话。通常,所有与会话相关的数据(访问令牌,权限等)都会被缓存,如果您创建一个新的Session(),它将使用缓存的数据(除非您调用closeAndClearTokenInformation,在这种情况下它会清除缓存)。我只会在用户显式注销时调用closeAndClearTokenInformation(),否则只需在onDestroy()中调用close()。
我也会避免调用openForPublish。始终执行openForRead,然后调用session.getPermissions()来检查您是否具有必要的权限,然后在需要更多时调用requestNewPublishPermissions。