Reputation: 475
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
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
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
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
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
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