Facebook Android SDK 4.5.0 get email address

后端 未结 7 1453
[愿得一人]
[愿得一人] 2020-12-04 16:02

I\'m currently creating a test application to test using the latest facebook SDK to update our existing application problem is that I need to get the email address which I k

相关标签:
7条回答
  • 2020-12-04 16:06

    Putting this code:

    btnLoginFb.setReadPermissions(Arrays.asList("email"));
    

    before

    RegisterCallback
    

    should solve the problem.

    0 讨论(0)
  • 2020-12-04 16:10

    You need to ask for parameters to facebook in order to get your data. Here I post my function where I get the facebook data. The key is in this line:

    parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
    

    Hope it helps you.

    btnLoginFb.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    
            @Override
            public void onSuccess(LoginResult loginResult) {
    
                System.out.println("onSuccess");
                progressDialog = new ProgressDialog(LoginActivity.this);
                progressDialog.setMessage("Procesando datos...");
                progressDialog.show();
                String accessToken = loginResult.getAccessToken().getToken();
                Log.i("accessToken", accessToken);
    
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
    
                    @Override
                    public void onCompleted(JSONObject object, GraphResponse response) {
                        Log.i("LoginActivity", response.toString());
                        // Get facebook data from login
                        Bundle bFacebookData = getFacebookData(object); 
                    }
                });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location"); // Parámetros que pedimos a facebook
                request.setParameters(parameters);
                request.executeAsync();
            }
    
            @Override
            public void onCancel() {
                System.out.println("onCancel");
            }
    
            @Override
            public void onError(FacebookException exception) {
                System.out.println("onError");
                Log.v("LoginActivity", exception.getCause().toString());
            }
        });
    
    
    
    private Bundle getFacebookData(JSONObject object) {
    
            try {
                Bundle bundle = new Bundle();
                String id = object.getString("id");
    
                try {
                    URL profile_pic = new URL("https://graph.facebook.com/" + id + "/picture?width=200&height=150");
                    Log.i("profile_pic", profile_pic + "");
                    bundle.putString("profile_pic", profile_pic.toString());
    
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                    return null;
                }
    
                bundle.putString("idFacebook", id);
                if (object.has("first_name"))
                    bundle.putString("first_name", object.getString("first_name"));
                if (object.has("last_name"))
                    bundle.putString("last_name", object.getString("last_name"));
                if (object.has("email"))
                    bundle.putString("email", object.getString("email"));
                if (object.has("gender"))
                    bundle.putString("gender", object.getString("gender"));
                if (object.has("birthday"))
                    bundle.putString("birthday", object.getString("birthday"));
                if (object.has("location"))
                    bundle.putString("location", object.getJSONObject("location").getString("name"));
    
                return bundle;
            }
          catch(JSONException e) {
            Log.d(TAG,"Error parsing JSON");
          }
        return null;
    }
    
    0 讨论(0)
  • 2020-12-04 16:16

    Instead of getting the value of the graphResponse, access the email using the JSONObject me

    userEmail = jsonObject.getString("email");
    
    0 讨论(0)
  • 2020-12-04 16:22

    Hope it helps you

    /*** setupFacebook stuff like make login with facebook and get the userId,Name and Email*/
        private void setupFacebookStuff() {
            Log.e(TAG, "key hash= " + Utils.getKeyHash(SplashActivity.this, getPackageName()));
    
            // This should normally be on your application class
            FacebookSdk.sdkInitialize(SplashActivity.this);
    
            accessTokenTracker = new AccessTokenTracker() {
                @Override
                protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
                       currentAccessToken.getToken();
                }
            };
    
            loginManager = LoginManager.getInstance();
            callbackManager = CallbackManager.Factory.create();
    
            LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                @Override
                public void onSuccess(LoginResult loginResult) {
    
                    preference.setUserLogin(true);
    
                    final GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                        @Override
                        public void onCompleted(JSONObject object, GraphResponse response) {
                            try {
                                    Log.e("id", "" + object);
    
                                if (object.has(getString(R.string.fbParamId))) {
    
                                    final String userId = object.optString(getString(R.string.fbParamId));
                                    final String userPicture = "https://graph.facebook.com/" + object.optString(getString(R.string.fbParamId)) + "/picture?type=large";
    
                                    preference.setUserId(userId);
                                    preference.setUserPictureUrl(userPicture);
    
                                }
                                if (object.has(getString(R.string.fbParamUserName))) {
    
    
                                    final String userName = object.optString(getString(R.string.fbParamUserName));
                                    preference.setUserName(userName);
                                }
    
                                if (object.has(getString(R.string.fbParamEmail))) {
    
                                    final String userEmail = object.optString(getString(R.string.fbParamEmail));
                                    preference.setUserName(userEmail);
                                    Log.e("useremail", userEmail);
                                }
    
                                callMainActivity(true);
    
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });
    
                    final Bundle parameters = new Bundle();
                    parameters.putString("fields", "name,email,id");
                    request.setParameters(parameters);
                    request.executeAsync();
                }
    
                @Override
                public void onCancel() {
                    Toast.makeText(getBaseContext(), "Login Cancelled", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onError(FacebookException error) {
                    Toast.makeText(getBaseContext(), "Problem connecting to Facebook", Toast.LENGTH_SHORT).show();
                    Log.e(TAG, "Facebook login error " + error);
                }
            });
        }
    
    0 讨论(0)
  • 2020-12-04 16:22

    I guess getting email permissions can help..

    LoginManager.getInstance().logInWithReadPermissions(
    fragmentOrActivity,
    Arrays.asList("email"));
    
    0 讨论(0)
  • 2020-12-04 16:26

    You can also use GraphResponse object to get the values

    LoginManager.getInstance().registerCallback(callbackManager,
        new FacebookCallback<LoginResult>()
        {
            @Override
            public void onSuccess(LoginResult loginResult)
            {
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                Log.v("LoginActivity", response.toString());
                                try {
                                    // Application code
                                    String email = response.getJSONObject().getString("email");
                                    txtStatus.setText("Login Success \n" + email);
                                }catch(Exception e){
                                    e.printStackTrace();;
                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender,birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }
    
            @Override
            public void onCancel()
            {
                txtStatus.setText("==============Login Cancelled=============");
            }
    
            @Override
            public void onError(FacebookException exception)
            {
                txtStatus.setText("==============Login Error=================");
                exception.printStackTrace();
            }
        });
    
    0 讨论(0)
提交回复
热议问题