登录Android后获取facebook电子邮件

登录Android后获取facebook电子邮件,android,json,facebook,email,Android,Json,Facebook,Email,这是我实现连接的代码 import java.io.FileNotFoundException; import java.io.IOException; import java.net.MalformedURLException; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import andro

这是我实现连接的代码

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

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

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.ProgressBar;
import android.widget.TextView;

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.android.Util;

public class FacebookConnect extends Activity{

    public static final String TAG = "FACEBOOK";
    private Facebook mFacebook;
    public static final String APP_ID = "XXX";
    private AsyncFacebookRunner mAsyncRunner;
    private static final String[] PERMS = new String[] { "read_stream" };
        private SharedPreferences sharedPrefs;
        private Context mContext; 

        private TextView username;
        private ProgressBar pb;
        String fbId, fbName, fbEmail;

        public void setConnection() {
                mContext = this;
                mFacebook = new Facebook(APP_ID);
                mAsyncRunner = new AsyncFacebookRunner(mFacebook);
        }

        public void getID(TextView txtUserName, ProgressBar progbar) {
                username = txtUserName;
                pb = progbar;
                if (isSession()) {
                        Log.d(TAG, "sessionValid");
                        mAsyncRunner.request("me", new IDRequestListener());
                } else {
                    // no logged in, so relogin
                    Log.d(TAG, "sessionNOTValid, relogin");
                        mFacebook.authorize(this, PERMS, new LoginDialogListener());
                }
        }

        public boolean isSession() {
                sharedPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
                String access_token = sharedPrefs.getString("access_token", "x");
            Long expires = sharedPrefs.getLong("access_expires", -1);
                Log.d(TAG, access_token);

                if (access_token != null && expires != -1) {
                        mFacebook.setAccessToken(access_token);
                        mFacebook.setAccessExpires(expires);
                }
                return mFacebook.isSessionValid();
        }

        private class LoginDialogListener implements DialogListener {

                @Override
                public void onComplete(Bundle values) {
                        Log.d(TAG, "LoginONComplete");
                    String token = mFacebook.getAccessToken();
                    long token_expires = mFacebook.getAccessExpires();
                    Log.d(TAG, "AccessToken: " + token);
                    Log.d(TAG, "AccessExpires: " + token_expires);
                    sharedPrefs = PreferenceManager
                                    .getDefaultSharedPreferences(mContext);
                    sharedPrefs.edit().putLong("access_expires", token_expires).commit();
                    sharedPrefs.edit().putString("access_token", token).commit();
                    mAsyncRunner.request("me", new IDRequestListener());
                }

                @Override
                public void onFacebookError(FacebookError e) {
                        Log.d(TAG, "FacebookError: " + e.getMessage());
                }

                @Override
                public void onError(DialogError e) {
                        Log.d(TAG, "Error: " + e.getMessage());
                }

                @Override
                public void onCancel() {
                        Log.d(TAG, "OnCancel");
                }
        }

        private class IDRequestListener implements RequestListener {

                @Override
                public void onComplete(String response, Object state) {
                        try {
                                Log.d(TAG, "IDRequestONComplete");
                            Log.d(TAG, "Response: " + response.toString());
                                JSONObject json = Util.parseJson(response);
                                fbId = json.getString("id");
                                fbName = json.getString("name");
                                //fbEmail = json.getString("email");

                                FacebookConnect.this.runOnUiThread(new Runnable() {
                                    public void run() {
                                    username.setText("Welcome: " + name + "\n ID: " + fbId);
                                pb.setVisibility(ProgressBar.GONE);
                                    }
                            });
                        } catch (JSONException e) {
                                Log.d(TAG, "JSONException: " + e.getMessage());
                    } catch (FacebookError e) {
                            Log.d(TAG, "FacebookError: " + e.getMessage());
                        }
                }

                @Override
                public void onIOException(IOException e, Object state) {
                        Log.d(TAG, "IOException: " + e.getMessage());
                }

                @Override
                public void onFileNotFoundException(FileNotFoundException e,
                                Object state) {
                        Log.d(TAG, "FileNotFoundException: " + e.getMessage());
                }

                @Override
                public void onMalformedURLException(MalformedURLException e,
                                Object state) {
                        Log.d(TAG, "MalformedURLException: " + e.getMessage());
                }

                @Override
                public void onFacebookError(FacebookError e, Object state) {
                        Log.d(TAG, "FacebookError: " + e.getMessage());
                }

        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                mFacebook.authorizeCallback(requestCode, resultCode, data);
        }
}
作为响应,我得到一个JSON。例如:

08-15 14:22:42.160: DEBUG/FACEBOOK(1258): Response: {"id":"3159628280","name":"Peter Black","first_name":"Peter","last_name":"Black","link":"http:\/\/www.facebook.com\/Peter.Black","username":"Peter.Black","gender":"male","timezone":3,"locale":"bg_BG","verified":true,"updated_time":"2011-08-14T08:42:59+0000"}

我的问题是如何获取用户的电子邮件(他登录Facebook时使用的电子邮件)?

您需要
电子邮件
权限才能读取用户的电子邮件地址。 这将在来自
[uid]
me
请求的json响应中添加电子邮件标记

电子邮件

提供对电子邮件中用户主要电子邮件地址的访问 财产。不要向用户发送垃圾邮件。您使用电子邮件必须遵守以下两项 脸谱网的政策和反垃圾邮件法案


来源:

单击登录按钮时执行此操作:

  OpenRequest openRequest = new OpenRequest(this);
  List<String> readPermissions = new ArrayList<String>();
  readPermissions.add("email");
  openRequest.setPermissions(readPermissions);
  openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
  openRequest.setCallback(statusCallback);
  session.openForRead(openRequest);
OpenRequest OpenRequest=新的OpenRequest(此);
List readPermissions=new ArrayList();
readPermissions.add(“电子邮件”);
setPermissions(readPermissions);
openRequest.setLoginBehavior(SessionLoginBehavior.SSO_和_回退);
setCallback(statusCallback);
openForRead(openRequest);

在Facebook SDK 3.0.x中检索电子邮件的另一个选项是使用此开源库:

安卓简易facebook

  • 首先,使用此权限

    Permissions.EMAIL
    
  • 然后,登录

    mSimpleFacebook.login(MainActivity.this);
    
  • 然后,获取个人资料

    mSimpleFacebook.getProfile(new OnProfileRequestAdapter()
    {
        @Override
        public void onComplete(Profile profile)
        {
            String id = profile.getId();
            String firstName = profile.getFirstName();
            String birthday = profile.getBirthday();
            String email = profile.getEmail();
            String bio = profile.getBio();
            // ... and many more properties of profile ...
        }
    });
    

完整示例包括权限内容和其他简化方法(如:发布提要、获取好友等…

在调用会话之前。openActiveSession执行此操作以获取权限添加以下内容:

List<String> permissions = new ArrayList<String>();
permissions.add("email");
List permissions=new ArrayList();
权限。添加(“电子邮件”);

Session.openActiveSession()
中的最后一个参数应该是权限。现在您可以访问
user.getProperty(“电子邮件”).toString()

谢谢,它成功了!如果这篇文章对某人有用-权限如下:
private static final String[]PERMS=newstring[]{“read_stream”,“email”}都德帮我获取facebook用户电子邮件地址如果他登录facebook,上面的代码是否获取用户详细信息(电子邮件、名字、姓氏等)?如何获取用户的个人资料图片??有没有可能获取url?杜德,你有facebook用户的电子邮件地址,我正在尝试,但没有获取电子邮件地址列表。不确定我是否理解正确,但在下面(答案)这是我获取电子邮件地址的方式。老兄,我告诉你,我想获取所有Facebook用户的电子邮件地址。使用下面所示的方法,你无法在一个周期内获取所有电子邮件。