如何使用Android SDK 3.0 Beta获得Facebook额外的权限



我使用官方SDK Beta 3.0。

我将在不使用loginbutton的情况下获得用户记录的额外权限(user_likes,user_likes,user_interests,friends_likes等)(如下所述,请在此处https://developers.facebook.com/docs/docs/docs/howtos/howtos/androids/androids/androidsdk/androidsdk/3.0/登录名 - 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.pointer.exception

私人GraphObject Muser;...//分配您从中获得的用户对象 通话以获取用户信息

字符串宗教= muser.getProperty("宗教")。

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

您可以在会话创建后额外权限。不结束会话

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

在Facebook Android SDK项目中添加一个方法:

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

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

希望这可以回答您的问题。

检查Muser是否不是null。

这是Graph API Explorer的链接。您只需选择正确的应用程序,然后单击"创建访问令牌"。在弹出对话框中,您可以设置优先的权限。

正如您在原始示例中看到的那样,称为:" sessionLogInsample" - 收到令牌后,您可以调用可从" https://graph.facebook.com/me?access_token = insert = insert_your_real_real_real_token&format&format都是从" https://graph.facebook.com/me?= JSON"

JSON文件是响应,其中所有由于用户的私有设置而可用的所有信息。

我希望我有帮助。

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

最新更新