Reputation: 285
I'm integrating facebook into my android application, when user has logged in for first time, I'm requesting publish_actions permissions using my requestFacebookPermissions(session) method. but whenever I call this method it gives me below exception...
java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request.
I don't have any other request pending, might be some other internal request but How do I request permissions without getting this exception? it is ok if I have to wait till other requests are completed, but I don't know how to get whether pending requests are completed.
private void requestFacebookPermissions(Session session) {
if (session != null && session.getState().isOpened()) {
List<String> permissions = session.getPermissions();
Log.i("Facebook", "Permissions Count: " + permissions.size());
for (String string : permissions) {
Log.i("FacebookPermissions", string);
}
if (!permissions.containsAll(PERMISSIONS)) {
try {
session.requestNewPublishPermissions(new Session.NewPermissionsRequest(FacebookActivity.this, PERMISSIONS));
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
return;
}
}
Upvotes: 2
Views: 1938
Reputation: 923
I ask for publish permission after log-in
This is my code
public class FacebookAccount extends FragmentActivity {
private UserSettingsFragment userSettingsFragment;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.facebook_login);
FragmentManager fragmentManager = getSupportFragmentManager();
userSettingsFragment = (UserSettingsFragment) fragmentManager
.findFragmentById(R.id.login_fragment);
userSettingsFragment.setReadPermissions(Utility.READ_PERMISSIONS);
userSettingsFragment
.setSessionStatusCallback(new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state == SessionState.OPENED
&& !session.getPermissions().containsAll(
Utility.PUBLISH_PERMISSIONS)) {
session.requestNewPublishPermissions(new Session.NewPermissionsRequest(
FacebookAccount.this,
Utility.PUBLISH_PERMISSIONS));
}
if (session.isOpened()
&& state == SessionState.OPENED_TOKEN_UPDATED) {
....Save session access token
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (userSettingsFragment != null)
userSettingsFragment
.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
}
Upvotes: 1