如何从Facebook获取emailid使用facebook sdk版本3.22.0登录

用户名

当我单击按钮时,我只使用一个按钮,所以我想获取电子邮件ID。这是我的代码,获取ID和名称,但无法获取emailid。我使用的是Facebook sdk 3.22.0版,请帮助我。

在此处输入代码

包com.example.testintegration;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;

import org.json.JSONException;
import org.json.JSONObject;

import com.example.testfbintegration.R;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
import com.facebook.model.GraphUser;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private static String APP_ID = "862722850469774"; // Replace with your App ID

    // Instance of Facebook Class
    private Facebook facebook = new Facebook(APP_ID);
    private AsyncFacebookRunner mAsyncRunner;
    String FILENAME = "AndroidSSO_data";
    private SharedPreferences mPrefs;

    // Buttons
    Button btnFbLogin;
    /*Button btnFbGetProfile;
    Button btnPostToWall;
    Button btnShowAccessTokens;*/


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


        btnFbLogin = (Button) findViewById(R.id.btn_fblogin);
        /*btnFbGetProfile = (Button) findViewById(R.id.btn_get_profile);
        btnPostToWall = (Button) findViewById(R.id.btn_fb_post_to_wall);
        btnShowAccessTokens = (Button) findViewById(R.id.btn_show_access_tokens);*/
        mAsyncRunner = new AsyncFacebookRunner(facebook);

        /**
         * Login button Click event
         * */
        btnFbLogin.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d("Image Button", "button Clicked");
                //loginToFacebook();
                logfacebook();
            }
        });

        /**
         * Getting facebook Profile info
         * *//*
        btnFbGetProfile.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                getProfileInformation();
            }
        });

        *//**
         * Posting to Facebook Wall
         * *//*
        btnPostToWall.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                postToWall();
            }
        });

        *//**
         * Showing Access Tokens
         * *//*
        btnShowAccessTokens.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                showAccessTokens();
            }
        });*/




    }

    public void logfacebook()
    {
         Session.openActiveSession(MainActivity.this, true, new Session.StatusCallback() {

             // callback when session changes state
             @Override
             public void call(Session session, SessionState state, Exception exception) {
               if (session.isOpened()) {

                 // make request to the /me API
                 Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                   // callback after Graph API response with user object
                   @Override
                   public void onCompleted(GraphUser user, Response response) {
                     if (user != null) {
                         System.out.println(user.getName());
                         System.out.println(user.getBirthday());
                         System.out.println(user.getFirstName());
                         System.out.println(user.getLastName());
                         System.out.println(user.getLink());
                         System.out.println(user.getUsername());
                         System.out.println(user.getLocation());
                         System.out.println("facebook user id" + user.getId());
                        System.out.println(user.asMap().get("email").toString());
                        // Session.OpenRequest open = new Session.OpenRequest(Login)
                     }
                   }
                 });
               }
             }
           });
    }
    /**
     * Function to login into facebook
     * */
    public void loginToFacebook() {

        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if (access_token != null) {
            facebook.setAccessToken(access_token);

            btnFbLogin.setVisibility(View.INVISIBLE);

            // Making get profile button visible
        //  btnFbGetProfile.setVisibility(View.VISIBLE);

            // Making post to wall visible
            //btnPostToWall.setVisibility(View.VISIBLE);

            // Making show access tokens button visible
            //btnShowAccessTokens.setVisibility(View.VISIBLE);

            Log.d("FB Sessions", "" + facebook.isSessionValid());
        }

        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
            facebook.authorize(this,
                    new String[] { "email", "publish_actions" },
                    new DialogListener() {

                        @Override
                        public void onCancel() {
                            // Function to handle cancel event
                        }

                        @Override
                        public void onComplete(Bundle values) {
                            // Function to handle complete event
                            // Edit Preferences and update facebook acess_token
                            SharedPreferences.Editor editor = mPrefs.edit();
                            editor.putString("access_token",
                                    facebook.getAccessToken());
                            editor.putLong("access_expires",
                                    facebook.getAccessExpires());
                            editor.commit();

                            // Making Login button invisible
                            btnFbLogin.setVisibility(View.INVISIBLE);

                            // Making logout Button visible
                        //  btnFbGetProfile.setVisibility(View.VISIBLE);

                            // Making post to wall visible
                            //btnPostToWall.setVisibility(View.VISIBLE);

                            // Making show access tokens button visible
                            //btnShowAccessTokens.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onError(DialogError error) {
                            // Function to handle error

                        }

                        @Override
                        public void onFacebookError(FacebookError fberror) {
                            // Function to handle Facebook errors

                        }

                    });
        }
    }

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


    /**
     * Get Profile information by making request to Facebook Graph API
     * */
    public void getProfileInformation() {
        mAsyncRunner.request("me", new RequestListener() {
            @Override
            public void onComplete(String response, Object state) {
                Log.d("Profile", response);
                String json = response;
                try {
                    // Facebook Profile JSON data
                    JSONObject profile = new JSONObject(json);

                    // getting name of the user
                    final String name = profile.getString("name");

                    // getting email of the user
                    final String email = profile.getString("email");

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "Name: " + name + "\nEmail: " + email, Toast.LENGTH_LONG).show();
                        }

                    });


                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onIOException(IOException e, Object state) {
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
            }
        });
    }

    /**
     * Function to post to facebook wall
     * */
    public void postToWall() {
        // post on user's wall.
        facebook.dialog(this, "feed", new DialogListener() {

            @Override
            public void onFacebookError(FacebookError e) {
            }

            @Override
            public void onError(DialogError e) {
            }

            @Override
            public void onComplete(Bundle values) {
            }

            @Override
            public void onCancel() {
            }
        });

    }

    /**
     * Function to show Access Tokens
     * */
    public void showAccessTokens() {
        String access_token = facebook.getAccessToken();

        Toast.makeText(getApplicationContext(),
                "Access Token: " + access_token, Toast.LENGTH_LONG).show();
    }

    /**
     * Function to Logout user from Facebook
     * */
    public void logoutFromFacebook() {
        mAsyncRunner.logout(this, new RequestListener() {
            @Override
            public void onComplete(String response, Object state) {
                Log.d("Logout from Facebook", response);
                if (Boolean.parseBoolean(response) == true) {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            // make Login button visible
                            btnFbLogin.setVisibility(View.VISIBLE);

                            // making all remaining buttons invisible
                            /*btnFbGetProfile.setVisibility(View.INVISIBLE);
                            btnPostToWall.setVisibility(View.INVISIBLE);
                            btnShowAccessTokens.setVisibility(View.INVISIBLE);*/
                        }

                    });

                }
            }

            @Override
            public void onIOException(IOException e, Object state) {
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
            }
        });
    }

    }
苏宝

请检查您的答案的此链接,如果在fb集成中发现任何问题,请告诉我。

通过android中的fb登录后无法获取emailId

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Facebook SDK Xamarin Android登录?

使用 Facebook-PHP-SDK 登录 Facebook

无法使用Facebook SDK登录

使用sdk php登录Facebook

如何使用facebook sdk通过自定义登录按钮登录facebook

Facebook SDK使用Swift 3 iOS 10登录

如何在Android中使用SDK 4.1.0登录Facebook?

如何使用SDK 3.0在Android中存储Facebook的登录状态

如何以编程方式从Facebook SDK 3.0注销而不使用Facebook登录/注销按钮?

如何使用Facebook SDK Android获取Facebook照片,全名,性别

如何使用Android Facebook SDK从Facebook获取朋友列表?

如何使用Facebook Android SDK 3.8获取Facebook访问令牌?

我如何登录Facebook Android SDK 3.15.0

使用C#facebook sdk登录的Facebook v2.0

使用Facebook Android SDK和Proguard登录

使用Facebook自己的SDK登录QuickBlox?

Xamarin iOS:使用Facebook SDK登录按钮

Facebook PHP SDK 4.0使用Lumen登录

使用现有令牌登录Facebook SDK

使用LoginManager登录的Android Facebook SDK 4.0

使用js sdk登录到Facebook

Facebook Android SDK 4.0不返回emailID

我正在使用的Android SDK目标版本为READ_CONTACTS为22

在Android中使用SDK 3.15登录到Facebook时获取用户名

使用facebook sdk共享首选项登录并获取有关用户的信息

使用 facebook javascript SDK 登录时无法获取公共用户电子邮件

在iOS中使用Facebook SDK登录时无法获取用户的电子邮件ID

Facebook登录-检测未使用PHP-SDK登录的用户

Unity Facebook SDK登录始终返回用户0访问令牌abc ... z