SkyNet_citizen
SkyNet_citizen

Reputation: 475

How to get Facebook Additional Permissions with android sdk 3.0 beta?

I'm developing a simple Facebook app for Android using the official sdk beta 3.0.

I would to get additional permissions for user logged (user_likes, user_interests, friends_likes, etc...) without using the LoginButton (as explained here https://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/) and, in fact, I'm getting the additional permissions with method

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        List<String> permission=new ArrayList<String>();
        permission.add("user_birthday");
        permission.add("user_likes");
        permission.add("user_questions");
        permission.add("user_interests");
        permission.add("user_relationships");
        permission.add("user_groups");
        permission.add("user_religion_politics");
        permission.add("friends_birthday");
        permission.add("friends_interests");
        permission.add("friends_likes");
        permission.add("friends_groups");
        permission.add("friends_questions");
        permission.add("friends_relationships");
       // this.openSession();
          this.openSessionForRead(app_id, permission);

    } 

and actually, it opens the login view asking for permission to have additional permissions.

Now, I would know how to obtain the additional permissions because, when I'm calling user.get**() it not showing other methods except those for base informations.

Thanks!


I'm getting a Null.pointer.exception using

private GraphObject mUser; ... // Assign the user object you get from a call to get the user's info

String religion = mUser.getProperty("religion").toString();

here my logcat:

11-08 14:21:47.908: E/AndroidRuntime(1306): FATAL EXCEPTION: main
11-08 14:21:47.908: E/AndroidRuntime(1306): java.lang.NullPointerException
11-08 14:21:47.908: E/AndroidRuntime(1306):     at com.********.*****.Main$1.onCompleted(Main.java:123)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at com.facebook.Request$1.onCompleted(Request.java:248)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at com.facebook.Request$4.run(Request.java:1197)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at android.os.Handler.handleCallback(Handler.java:615)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at android.os.Looper.loop(Looper.java:137)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at android.app.ActivityThread.main(ActivityThread.java:4745)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at java.lang.reflect.Method.invokeNative(Native Method)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at java.lang.reflect.Method.invoke(Method.java:511)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-08 14:21:47.908: E/AndroidRuntime(1306):     at dalvik.system.NativeStart.main(Native Method)

Upvotes: 4

Views: 9043

Answers (6)

user1974433
user1974433

Reputation: 77

    Session.Builder bui = new Builder(this); //should be an activity
    Session session  = bui.build();
    Session.OpenRequest openRequest = new OpenRequest(context);
    List<String> permission=new ArrayList<String>();
        permission.add("user_birthday");
        permission.add("user_likes");
        permission.add("user_questions");
        permission.add("user_interests");
        permission.add("user_relationships");
        permission.add("user_groups");
        permission.add("user_religion_politics");
        permission.add("friends_birthday");
        permission.add("user_location");
        permission.add("friends_likes");
        permission.add("friends_groups");
        permission.add("user_education_history");
        permission.add("friends_relationships");
        permission.add("email");

    openRequest.setPermissions(permission);
    Session.setActiveSession(session);//This will take care of the null pointer
    openRequest.setCallback(this);//the callback
    session.openForRead(openRequest);

Session.setActiveSession(session);
IS the missing line in your code... (and the builder)

Upvotes: 0

Giorgio
Giorgio

Reputation: 13529

Add a method to the com.facebook.Session.java class within the Facebook Android SDK project:

public static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List permissions) {
    return openActiveSession(activity, allowLoginUI, new OpenRequest(activity).setCallback(callback).setPermissions(permissions));
}

From your code you can then call directly

Session.openActiveSession(LoginActivity.this, true, new Session.StatusCallback() {

    // callback when session changes state
    @Override
    public void call(Session session, SessionState state, Exception exception) {

        if (session.isOpened()) {

            //YOU CALLBACK CODE

        }
    }

}, Arrays.asList("email","OTHER_PERMISSIONS_YOU_WANT_TO_REQUEST"));

Upvotes: 3

user2273265
user2273265

Reputation:

You can additional permissions after the session has created. without closing the session

Session.NewPermissionsRequest newPermissionsRequest = new Session
                    .NewPermissionsRequest(this, Arrays.asList("user_groups"));

            session.requestNewReadPermissions(newPermissionsRequest);

Upvotes: 5

virusss8
virusss8

Reputation: 235

Here is the link to the Graph api explorer. You just select right application and click create access token. Into popup dialog you can set prefered permission.

As you can see in the original example called: "SessionLoginSample" - after you receive TOKEN, you can call JSON file structure which is available from "https://graph.facebook.com/me?access_token=insert_your_real_token&format=json"

That json file is response with all information that is available due to user's private settings.

I hope I helped.

Upvotes: 0

Maciek W.
Maciek W.

Reputation: 114

Check if the mUser is not null.

Upvotes: 0

C Abernathy
C Abernathy

Reputation: 5523

GraphUser only has a limited set of common properties you can pull and read, ex: birthday. To read something else like say religion you could do the following:

private GraphObject mUser;
...
// Assign the user object you get from a call to get the user's info

String religion = mUser.getProperty("religion").toString();

Hopefully this answers your question.

Upvotes: 0

Related Questions