Wann beantragen Sie Berechtigungen mit dem neuen Android SDK 3.0 von Facebook?

Mit dem neuen Android SDK 3.0 von Facebook (das vor einigen Tagen veröffentlicht wurde) hat sich der Authentifizierungsprozess geändert.

Wie beantragen Sie eine Leseberechtigung wie "friends_hometown"?

Der folgende Code ist, wie ich es versuche - aber ich bin mir ziemlich sicher, dass es nicht so ist, wie Sie dies tun sollten:

Version 1:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Session.openActiveSession(this, true, new Session.StatusCallback() { // start Facebook login
        @Override
        public void call(Session session, SessionState state, Exception exception) { // callback for session state changes
            if (session.isOpened()) {
                List<String> permissions = new ArrayList<String>();
                permissions.add("friends_hometown");
                session.requestNewReadPermissions(new Session.NewPermissionsRequest(FBImport.this, permissions));
                Request.executeGraphPathRequestAsync(session, "me/friends/?access_token="+session.getAccessToken()+"&fields=id,name,hometown", new Request.Callback() {
                    ...
                });
            }
        }
    });
}

Version 2:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Session currentSession = Session.getActiveSession();
    if (currentSession == null || currentSession.getState().isClosed()) {
        Session session = Session.openActiveSession(this, true, fbStatusCallback); // PROBLEM: NO PERMISSIONS YET BUT CALLBACK IS EXECUTED ON OPEN
        currentSession = session;
    }
    if (currentSession != null && !currentSession.isOpened()) {
        OpenRequest openRequest = new OpenRequest(this).setCallback(fbStatusCallback); // HERE IT IS OKAY TO EXECUTE THE CALLBACK BECAUSE WE'VE GOT THE PERMISSIONS
        if (openRequest != null) {
            openRequest.setDefaultAudience(SessionDefaultAudience.FRIENDS);
            openRequest.setPermissions(Arrays.asList("friends_hometown"));
            openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
            currentSession.openForRead(openRequest);
        }
    }
}

Ich beantrage die Erlaubnis, sobald die Sitzung geöffnet ist. Zu diesem Zeitpunkt startet der Code jedoch bereits eine Graph API-Anfrage, sodass die Erlaubnisanfrage zu spät kommt.

Können Sie nicht gleichzeitig mit der Initialisierung der Sitzung eine Erlaubnis anfordern?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage