Get Read and Publish Permissions in one request

20,147

Solution 1

What ever you saw on Spotify is not the outcome of publish_stream .What they have used is the Open Graph

Open graph concepts involves integrating actions of the app with the FB activity post and share with the users through the application they use. Read more about it at the above mentioned link.


Edits Explanation: Check the Open Graph Permissions

Sample Activity:

public class MainActivity extends Activity implements StatusCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        OpenRequest open = new OpenRequest(this);
        open.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        open.setPermissions(Arrays.asList(new String[]{"email", "publish_actions", "user_birthday", "user_hometown"}));
        open.setCallback(this);
        Session s = new Session(this);
        s.openForPublish(open);
    }

    @Override
    public void call(Session session, SessionState state, Exception exception) {
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(Session.getActiveSession()!=null)
            Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }
}

This activity will show this (if the user is not logged in):

enter image description here

Solution 2

In my app I have created an instance for OpenRequest and I have set permissions for it.

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(context);

    op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
    op.setCallback(null);

    List<String> permissions = new ArrayList<String>();
    permissions.add("publish_stream");
    op.setPermissions(permissions);

    Session session = new Builder(InvitePartners.this).build();
    Session.setActiveSession(session);
    session.openForPublish(op);
}

It may be useful to you.

Solution 3

I just set it separately in the onCreate Method.

    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
    authButton.setPublishPermissions("publish_actions");
    authButton.setFragment(this);
    Session.NewPermissionsRequest newPermissionsRequest = new 
            Session.NewPermissionsRequest(this, Arrays.asList("read_stream"));
    Session.getActiveSession().requestNewReadPermissions(newPermissionsRequest);
Share:
20,147

Related videos on Youtube

baconcheese113
Author by

baconcheese113

BS in Computer Science at East Carolina University. Peaceful Meadows Kindergarten graduate class of '95.

Updated on July 09, 2022

Comments

  • baconcheese113
    baconcheese113 almost 2 years

    Before you all say it's not possible, open up the Spotify app and hit the signin with Facebook button.

    I'm wondering how they did it, and how I can get "publish_stream" and basic permissions/email in one request.

    Also, is it possible for me to reopen a Facebook session using the Facebook SDK if I have certain info from the last session (last time they used the app)?

    EDIT -SCREENSHOTS BELOW FOR THE MUSICALLY AVERT

    Spotify magic

    • Tommy Crush
      Tommy Crush about 11 years
      Just because its possible for Spotify doesn't mean the functionality is extended to all other apps. Know any other apps that can open 3rd party computer applications directly from FB?
    • baconcheese113
      baconcheese113 about 11 years
      Are you suggesting that Spotify is piggybacking off Facebook to offset its royalty streaming payments, and that Zuckerberg is promoting the partnership due to his long-acknowledged love for P2P streaming services? ...that's crazy.
    • Sherif elKhatib
      Sherif elKhatib about 11 years
      Check @Vijay's answer. I have edited it.
  • baconcheese113
    baconcheese113 about 11 years
    This doesn't seem to work from my mobile app. I tried with both my own implementation of session management (openSessionForPublish without already having read permissions) and with the tools that the Facebook SDK provided (com.facebook.widget.LoginButton and setting Read and Publish permissions). Both throw errors saying you can't request both at the same time.
  • baconcheese113
    baconcheese113 about 11 years
    Then it only prompts for the read permission. openSessionForRead("app_id", "permission_list")
  • Shoshi
    Shoshi about 11 years
    r u using Facebook SDK 3.02 ? i have done this using 3.02 and LoginButton
  • baconcheese113
    baconcheese113 about 11 years
    I am. And they were on the same page like above?
  • Sherif elKhatib
    Sherif elKhatib about 11 years
    This is the right answer. Try to add the permission publish_actions I will edit this answer and add a test.
  • sanjay
    sanjay about 11 years
    i exactly trying to do the same FB login(like pinterest) with permission email,basic_info,publish_action in a single request.implemented above code but unable to do so...plz help...