Get Publish_action Permission After Getting Read Permissions From Facebook
I'm integrating Facebook log in in my application. I'm able to get the read permissions but how to get publish permissions from Facebook SDK. This is how I'm asking for the permis
Solution 1:
I have got the answer to my question. Just have to open session after getting read permissions and then ask for publish permissions. Here is what I have done:
privatestaticfinalList<String> PERMISSIONS = Arrays.asList("publish_actions");
privateboolean pendingPublishReauthorization = false;
Add this in your onActivityResult:
Sessionsession= Session.getActiveSession();
if (session != null) {
// Check for publish permissions
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequestnewPermissionsRequest=newSession.NewPermissionsRequest(
this, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
return;
}
}
Also get this method integrated in the code:
privatebooleanisSubsetOf(Collection<String> subset,
Collection<String> superset) {
for (Stringstring : subset) {
if (!superset.contains(string)) {
returnfalse;
}
}
returntrue;
}
By doing these things, I"m able to get read as well publish permissions simultaneously.
Hope this will help others.
Solution 2:
From the facebook sdk 3.0 documents you can not give the read and publish permission simultaniously. But once you open the session with read permission later you can update this session to publish permission, by UiLifecycleHelper class. Once the session state changes to SessionState.OPENED_TOKEN_UPDATED means session updated with publish permission. Here is sample code for you hope this help you.
publicclassExample {
privatestaticfinalintREAUTH_ACTIVITY_CODE=100;
privatestaticfinal List<String> PERMISSIONS = Arrays.asList("publish_actions", "publish_stream");
privatestaticfinalStringPENDING_PUBLISH_KEY="pendingPublishReauthorization";
@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_submit_post);
uiHelper = newUiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
publishStory();
}
private Session.StatusCallbackcallback=newSession.StatusCallback() {
@Overridepublicvoidcall(Session session, SessionState state, Exception exception) {
if (exception != null) {
newAlertDialog.Builder(SubmitPost.this)
.setMessage(exception.getMessage())
.setPositiveButton("OK", null).show();
} else {
SubmitPost.this.onSessionStateChange(session, state, exception);
}
}
};
privatevoidonSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
if (pendingAnnounce && state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
// Session updated with new permissions so try publishing once more.
pendingAnnounce = false;
//call your method here to publish something on facebook
publishStory();
}
}
}
privatevoidrequestPublishPermissions(Session session) {
if (session != null) {
pendingAnnounce = true;
Session.NewPermissionsRequestnewPermissionsRequest=newSession.NewPermissionsRequest(this, PERMISSIONS);
newPermissionsRequest.setRequestCode(REAUTH_ACTIVITY_CODE);
SessionmSession= Session.openActiveSessionFromCache(this);
mSession.addCallback(callback);
mSession.requestNewPublishPermissions(newPermissionsRequest);
}
}
privatevoidpublishStory() {
// Check for publish permissions
List<String> permissions = this.session.getPermissions();
if (!permissions.containsAll(Arrays.asList(PERMISSIONS ))) {
this.requestPublishPermissions(this.session);
this.is_return = true;
return;
}
Sessionsession= Session.getActiveSession();
if (session != null) {
CreateFBPost();
}
@OverridepublicvoidonActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REAUTH_ACTIVITY_CODE:
Sessionsession= Session.getActiveSession();
if (session != null) {
session.onActivityResult(this, requestCode, resultCode, data);
}
break;
}
}
Post a Comment for "Get Publish_action Permission After Getting Read Permissions From Facebook"