图表api未返回用户电子邮件ID

Ami*_*rma 1 android facebook-graph-api

在此代码中,GraphUser不会返回email-id和联系号码.

 @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        uiHelper.onSaveInstanceState(outState);
    }

    private void onSessionStateChange(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            // userInfoTextView.setVisibility(View.VISIBLE);

                // Request user data and show the results
                Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (user != null) {
                            // Display the parsed user info

                        String email=   (String) response.getGraphObject().getProperty("email");

                            System.out.println("yahooooooooooo  "+email);
                            buildUserInfoDisplay(user);
                        }
                    }
                });
        } else if (state.isClosed()) {
            Log.i(TAG, "Logged out...");
        }
    }

    private String buildUserInfoDisplay(GraphUser user) {
        StringBuilder userInfo = new StringBuilder("");



        // Example: typed access (name)
        // - no special permissions required
        userInfo.append(String.format("Name: %s\n\n", 
            user.getName()));

        // Example: typed access (birthday)
        // - requires user_birthday permission
        userInfo.append(String.format("Birthday: %s\n\n", 
            user.getBirthday()));


        userInfo.append(String.format("Birthday: %s\n\n", 
                user.getBirthday()));


        userInfo.append(String.format("Gender: %s\n\n", 
                user.getProperty("gender")));

        userInfo.append(String.format("Iddddddd: %s\n\n", 
                user.getId()));
        // Example: partially typed access, to location field,
        // name key (location)
        // - requires user_location permission
        userInfo.append(String.format("Location: %s\n\n", 
            user.getLocation().getProperty("name")));

        // Example: access via property name (locale)
        // - no special permissions required
        userInfo.append(String.format("Locale: %s\n\n", 
            user.getProperty("locale")));
        return userInfo.toString();
    }
Run Code Online (Sandbox Code Playgroud)

Muh*_*bar 9

默认情况下,您不会收到电子邮件,因为您必须为电子邮件指定权限

Session.StatusCallback statusCallback = new Session.StatusCallback() 
        {

            @Override
            public void call(Session session, SessionState state, Exception exception) 
            {
                if(session.isOpened())
                {
                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() 
                    {

                        @Override
                        public void onCompleted(GraphUser user, Response response) 
                        {

                            if(user != null)
                            {
                                try
                                {
                                    System.out.println("Graph Inner Json"+user.getInnerJSONObject());
                                    String email = user.getInnerJSONObject().getString("email");
                                }
                             }
                         }
                     }
                 }
            }

YourActivityName.openActiveSession(this, true, statusCallback);
Run Code Online (Sandbox Code Playgroud)

这是openActiveSession()我们指定权限的地方

private static Session openActiveSession(Activity activity, boolean allowLoginUI, Session.StatusCallback statusCallback)
    {
        OpenRequest openRequest = new OpenRequest(activity);
        openRequest.setPermissions(Arrays.asList("user_birthday", "email"));
        openRequest.setCallback(statusCallback);

        Session session = new Session.Builder(activity).build();

        if(SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI)
        {
            Session.setActiveSession(session);
            session.openForRead(openRequest);

            return session;
        }

        return null;
    }
Run Code Online (Sandbox Code Playgroud)

而且里面onActivityResult()别忘了做

if(Session.getActiveSession() != null)
        {
            Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
        }
Run Code Online (Sandbox Code Playgroud)