How to get additional permissions for Facebook with Android beta sdk 3.0?

I am developing a simple Android application for Android using the official sdk beta 3.0.

I would get additional permissions for user login (user_likes, user_interests, friends_likes, etc.) without using LoginButton (as described here https://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook / ), and, in fact, I get additional permissions using the 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 in fact, it opens a login window requesting permission for additional permissions.

Now I would know how to get additional permissions, because when I call user.get ** (), it does not show other methods than those used for basic information.

Thanks!


I get Null.pointer.exception using

private GraphObject mUser; ... // Assign a custom object that you receive from the call to obtain user information

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

here is 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) 
+4
source share
6 answers

Additional permissions after creating a session. without closing the session

 Session.NewPermissionsRequest newPermissionsRequest = new Session .NewPermissionsRequest(this, Arrays.asList("user_groups")); session.requestNewReadPermissions(newPermissionsRequest); 
+5
source

Add a method to the com.facebook.Session.java class as part of the Android 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 directly call

 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")); 
+3
source
  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 is the missing line in your code ... (and the builder)

+1
source

GraphUser has a limited set of common properties that you can pull out and read, for example: birthday. To read something else, say say religion, you can do the following:

 private GraphObject mUser; ... // Assign the user object you get from a call to get the user info String religion = mUser.getProperty("religion").toString(); 

Hope this answers your question.

0
source

Check if mUser is invalid.

0
source

Here is a link to Graph api explorer . You just select the application you need and click "Create access token." In the popup dialog box, you can set your preferred resolution.

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

This json file is a response with all the information available due to the user's personal settings.

Hope I helped.

0
source

Source: https://habr.com/ru/post/1444577/


All Articles