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)
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);
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"));
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.
检查mUser是否为空。
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.
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)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.