我正在开发一个设置,用户可以自动选择在我的应用上发布自己的帖子。
但是,由于此功能是我的应用程序中的一个设置,我需要从实际的“发布请求”中分离出“允许权限”逻辑,这发生在另一个单独的活动上。
乍一看,我假设我可以将下面的代码块剪切并粘贴到我的活动中,并且假设我的用户已经使用facebook登录,它会起作用,但显然我还必须实现uihelpers和Session.StatusCallback。我需要在请求权限的设置活动中实现哪些额外代码(除了下面的逻辑)?
private void publishStory() {
Session session = Session.getActiveSession();
if (session != null) {
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
}
}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}
}
答案 0 :(得分:2)
正如李明在评论中指出的那样,您不需要实施uihelpers
,但您还需要以下内容。
实施StatusCallback
private Session.StatusCallback statusCallback = new SessionStatusCallback();
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
switch (state) {
case OPENED_TOKEN_UPDATED:
publishStory(); // Comes here after the new permissions are requested
break;
}
}
}
}
实施onActivityResult()
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
添加代码以完成publishStory()
private void publishStory() {
Session session = Session.getActiveSession();
if (session != null) {
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
// Do the real work here
...
}
}