4

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

我想在不使用 LoginButton 的情况下为用户登录(user_likes、user_interests、friends_likes 等)获得额外的权限(如此处所述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;... // 分配您从调用中获得的用户对象以获取用户的信息

字符串宗教 = mUser.getProperty("religion").toString();

这是我的日志:

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

6 回答 6

5

创建会话后,您可以附加权限。不关闭会话

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

            session.requestNewReadPermissions(newPermissionsRequest);
于 2013-04-12T13:27:54.017 回答
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"));
于 2013-04-28T17:29:34.450 回答
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();

希望这能回答你的问题。

于 2012-11-07T19:40:27.630 回答
0

检查 mUser 是否不为空。

于 2012-11-08T18:03:03.133 回答
0

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

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

该 json 文件响应用户的私人设置而提供的所有信息。

我希望我有所帮助。

于 2013-02-14T11:14:21.747 回答
0
    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);
是您的代码中缺少的行...(和构建器)

于 2013-07-26T20:23:31.503 回答