我正在将 Facebook
登录到我的应用程序中。我能够获得读取权限,但如何从 Facebook SDK 获得发布权限。
这就是我请求读取权限的方式:
@Override
public void onClick(View v) {
Session currentSession = Session.getActiveSession();
if (currentSession == null
|| currentSession.getState().isClosed()) {
Session session = new Session.Builder(context).build();
Session.setActiveSession(session);
currentSession = session;
}
if (currentSession.isOpened()) {
// Do whatever u want. User has logged in
} else if (!currentSession.isOpened()) {
// Ask for username and password
OpenRequest op = new Session.OpenRequest((Activity) context);
op.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
op.setCallback(null);
List<String> permissions = new ArrayList<String>();
permissions.add("user_likes");
permissions.add("email");
permissions.add("user_birthday");
permissions.add("user_location");
permissions.add("user_interests");
permissions.add("friends_birthday");
op.setPermissions(permissions);
Session session = new Builder(MainActivity.this).build();
Session.setActiveSession(session);
session.openForRead(op);
}
}
});
如果用户授予权限,我可以获取 access_token
并在 onActivityResult
上执行我的操作。这是我正在做的事情:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (Session.getActiveSession() != null)
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
Session currentSession = Session.getActiveSession();
if (currentSession == null || currentSession.getState().isClosed()) {
Session session = new Session.Builder(context).build();
Session.setActiveSession(session);
currentSession = session;
}
if (currentSession.isOpened()) {
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session,
new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user,
Response response) {
if (user != null) {
TextView welcome = (TextView) findViewById(R.id.welcome);
TextView access_token_txt = (TextView) findViewById(R.id.access_token);
TextView email_txt = (TextView) findViewById(R.id.email);
access_token = session.getAccessToken();
firstName = user.getFirstName();
fb_user_id = user.getId();
access_token_txt.setText(access_token);
JSONObject graphResponse = response
.getGraphObject().getInnerJSONObject();
fbEmail = null;
try {
fbEmail = graphResponse.getString("email");
} catch (JSONException e) {
e.printStackTrace();
}
email_txt.setText(fbEmail);
}
}
});
}
}
});
}
}
我已阅读 Facebook Developer
文档,如此处所述 Permissions - Facebook Developers ,我不能要求发布权限和读取权限。
第一个用户必须请求阅读,当用户自动授权时,我们可以请求发布权限。
如何在用户获得读取权限后从 Facebook 登录获得发布权限。
我们将不胜感激任何形式的帮助。
最佳答案
我的问题得到了答案。只需在获得读取权限后打开 session ,然后请求发布权限。这是我所做的:
private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private boolean pendingPublishReauthorization = false;
将此添加到您的 onActivityResult
中:
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;
}
通过执行这些操作,我可以同时获得阅读和发布权限。
希望这对其他人有帮助。
关于android - 从 Facebook 获取读取权限后获取 publish_action 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483757/