如何使用android sdk 3.0 beta获得Facebook附加权限?

时间:2012-11-07 13:03:16

标签: android facebook permissions facebook-android-sdk beta

我正在使用官方的sdk beta 3.0为Android开发一个简单的Facebook应用程序。

我会获得用户登录(user_likes,user_interests,friends_likes等等)的额外权限,而不使用LoginButton(如https://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/所述),事实上,我获得了额外的权限方法

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

    } 

实际上,它会打开登录视图,要求获得其他权限。

现在,我知道如何获取额外的权限,因为当我调用user.get * * ()时,除了那些基本信息之外,它没有显示其他方法。

谢谢!


我正在使用

获取Null.pointer.exception
  

私有GraphObject mUser; ... //分配您获得的用户对象   获取用户信息的电话

     

String religion = mUser.getProperty(“religion”)。toString();

这里是我的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)

6 个答案:

答案 0 :(得分:5)

会话创建后,您可以获得其他权限。没有关闭会话

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

            session.requestNewReadPermissions(newPermissionsRequest);

答案 1 :(得分:3)

将方法添加到Facebook Android SDK项目中的com.facebook.Session.java类中:

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

您可以从代码中直接致电

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"));

答案 2 :(得分:1)

    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(会话);
是您代码中的缺失行...(和构建器)

答案 3 :(得分:0)

GraphUser只有一组有限的常用属性,你可以提取和阅读,例如:生日。要阅读像宗教这样的其他内容,您可以执行以下操作:

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

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

希望这能回答你的问题。

答案 4 :(得分:0)

检查mUser是否为空。

答案 5 :(得分:0)

以下是Graph api explorer的链接。您只需选择正确的应用程序并单击创建访问令牌。进入弹出对话框,您可以设置首选权限。

正如您在原始示例中看到的那样:“SessionLoginSample” - 收到TOKEN后,您可以调用“https://graph.facebook.com/me?access_token=insert_your_real_token&format=json”中提供的JSON文件结构

该json文件是响应,包含因用户私有设置而可用的所有信息。

我希望我能帮忙。