从Facebook检索用户名和电子邮件ID到我的Android应用程序

时间:2015-02-10 05:28:14

标签: android

我正在尝试通过Facebook登录到我的Android应用程序的Facebook帐户中获取用户名和电子邮件ID等用户详细信息...首先,我创建了用户可以通过Facebook登录我的应用程序的代码。我在下面给出的代码......它工作正常....但是我需要做些什么来从Facebook获取用户详细信息

MainActivity.java

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends FragmentActivity {
private MainFragment mainFragment;




@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    if (savedInstanceState == null) {
        // Add the fragment on initial activity setup
        mainFragment = new MainFragment();
                 getSupportFragmentManager().beginTransaction().add(android.R.id.content,   mainFragment).commit();
    } else {
        // Or set the fragment from restored state info
        mainFragment = (MainFragment)   getSupportFragmentManager().findFragmentById(android.R.id.content);
    }

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;

}



@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}


}

MainFragment.java

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.widget.LoginButton;


public class MainFragment extends Fragment {
private static final String TAG = "MainFragment";
private UiLifecycleHelper uiHelper;
private LoginButton authButton;

private Session.StatusCallback callback = new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception              exception) {
        onSessionStateChange(session, state, exception);
    }
};

public View onCreateView(LayoutInflater inflater,
                         ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.activity_main, container, false);


    return view;
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   uiHelper = new UiLifecycleHelper(getActivity(),callback);
    uiHelper.onCreate(savedInstanceState);
}

@Override
public void onResume() {
    super.onResume();
    Session session = Session.getActiveSession();
    if (session != null &&
            (session.isOpened() || session.isClosed()) ) {
        onSessionStateChange(session, session.getState(), null);
    }
    uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}
private void onSessionStateChange(Session session, SessionState state,   Exception exception) {
    if (state.isOpened()) {
        Log.i(TAG, "Logged in...");
       // startActivity(new Intent(getActivity(),     ContentSliderActivity.class));
    } else if (state.isClosed()) {
        Log.i(TAG, "Logged out...");
    }
}

}

2 个答案:

答案 0 :(得分:0)

要首先从Facebook获取用户详细信息,必须获得用户的 public_profile 权限,一旦用户允许,您就可以获得

要获取用户详细信息,您可以使用method.once会话在使用用户权限成功登录后有效,您可以使用该会话获取用户详细信息。

private void getUserDetails(final Session session) {
        Request request = Request.newMeRequest(session,
                new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (session == Session.getActiveSession()) {
                            if (user != null) {
                                String id = user.getId();
                                String firstName = user.getFirstName();
                                String lastName = user.getLastName();
                                String name = user.getName();
//**Here you can get details of the user. show toast or display from here
                            }
                        }
                        if (response.getError() != null) {
                            Log.e("ERROR", response.getError()
                                    .getErrorMessage());
                        }
                    }
                });
        request.executeAsync();
    }

在你的片段中应用哪里? onSessionStateChange

MainFragment方法
private void onSessionStateChange(Session session, SessionState state,
            Exception exception) {
        if (state.isOpened()) {
            Log.i(TAG, "Logged in...");
            // Call getUserDetails if session is valid and user successfully
            // logged in
            getUserDetails(session);
        } else if (state.isClosed()) {
            Log.i(TAG, "Logged out...");
        }
    }

MainFragment

public class MainFragment extends Fragment {
    private static final String TAG = "MainFragment";
    private UiLifecycleHelper uiHelper;
    private LoginButton authButton;

    private Session.StatusCallback callback = new Session.StatusCallback() {
        @Override
        public void call(Session session, SessionState state,
                Exception exception) {
            onSessionStateChange(session, state, exception);
        }
    };

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.home1, container, false);

        return view;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        uiHelper = new UiLifecycleHelper(getActivity(), callback);
        uiHelper.onCreate(savedInstanceState);
    }

    @Override
    public void onResume() {
        super.onResume();
        Session session = Session.getActiveSession();
        if (session != null && (session.isOpened() || session.isClosed())) {
            onSessionStateChange(session, session.getState(), null);
        }
        uiHelper.onResume();
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        uiHelper.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public void onPause() {
        super.onPause();
        uiHelper.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        uiHelper.onDestroy();
    }

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

    private void onSessionStateChange(Session session, SessionState state,
            Exception exception) {
        if (state.isOpened()) {
            Log.i(TAG, "Logged in...");
            // Call getUserDetails if session is valid and user successfully
            // logged in
            getUserDetails(session);
        } else if (state.isClosed()) {
            Log.i(TAG, "Logged out...");
        }
    }

    private void getUserDetails(final Session session) {
        Request request = Request.newMeRequest(session,
                new Request.GraphUserCallback() {
                    @Override
                    public void onCompleted(GraphUser user, Response response) {
                        if (session == Session.getActiveSession()) {
                            if (user != null) {
                                String id = user.getId();
                                String firstName = user.getFirstName();
                                String lastName = user.getLastName();
                                String name = user.getName();
                                Toast.makeText(
                                        getActivity(),
                                        "Name : " + name + " ID  : " + id
                                                + " First name : " + firstName
                                                + " Last Name : " + lastName,
                                        Toast.LENGTH_LONG).show();

                            }
                        }
                        if (response.getError() != null) {
                            Log.e("ERROR", response.getError()
                                    .getErrorMessage());
                        }
                    }
                });
        request.executeAsync();
    }

答案 1 :(得分:0)

今年五月工作......

public class FacebookInfo extends Activity {
...
String get_id, get_name, get_gender, get_email, get_birthday, get_locale, get_location;

private Session.StatusCallback fbStatusCallback = new Session.StatusCallback() {
    public void call(Session session, SessionState state, Exception exception) {
        if (state.isOpened()) {
            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                public void onCompleted(GraphUser user, Response response) {

// the Response from the Api is stored in response variable 

               log.i("Response is"+response);

                    if (response != null) {
                        // do something with <response> now
                        try{
                            get_id = user.getId();
                            get_name = user.getName();
                            get_gender = (String) user.getProperty("gender");
                            get_email = (String) user.getProperty("email");
                            get_birthday = user.getBirthday();
                            get_locale = (String) user.getProperty("locale");
                            get_location = user.getLocation().toString();   

                        Log.d(LOG_TAG, user.getId() + "; " +  
                            user.getName() + "; " +
                            (String) user.getProperty("gender") + "; " +        
                            (String) user.getProperty("email") + "; " +
                            user.getBirthday()+ "; " +
                            (String) user.getProperty("locale") + "; " +
                            user.getLocation());
                        } catch(Exception e) {
                             e.printStackTrace();
                             Log.d(LOG_TAG, "Exception e");
                         }

                    }
                }
            });
        }
    }
};
...
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fbinfo);
    try {
        openActiveSession(this, true, fbStatusCallback, Arrays.asList(
                new String[] { "email",  "user_location", "user_birthday",
 "user_likes", "publish_actions" }), savedInstanceState);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
  private  Session openActiveSession(Activity activity, boolean allowLoginUI,
 StatusCallback callback, List<String> permissions, Bundle savedInstanceState) {
    OpenRequest openRequest = new OpenRequest(activity).
setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.
SSO_WITH_FALLBACK).setCallback(callback).
setDefaultAudience(SessionDefaultAudience.FRIENDS);

    Session session = Session.getActiveSession();
    Log.d(LOG_TAG, "" + session);
    if (session == null) {
        Log.d(LOG_TAG, "" + savedInstanceState);
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, fbStatusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || allowLoginUI) {
            session.openForRead(openRequest);
            return session;
        }
    }
    return null;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
}