简体   繁体   English

如何从Facebook SDK 4.5中的Android应用程序获取用户的个人资料图片,主要电子邮件,Facebook链接?

[英]How to get Profile picture,primary e-mail,Facebook link of a user from an android App in Facebook SDK 4.5?

I am using latest Facebook sdk for android in my applicaton. 我在我的应用程序中使用最新的Facebook sdk for android。

public class MainActivity extends AppCompatActivity {
    public static CallbackManager callbackmanager;
    private AccessTokenTracker mTokenTracker;
    private ProfileTracker mProfileTracker;
    Button fb_login;

    private boolean fb_signincllicked = false;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());

        setContentView(R.layout.activity_main);


        fb_login = (Button) findViewById(R.id.fb_login_button);
        fb_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onFblogin(true);
            }
        });
    }

    public void onFblogin(boolean fb_btn) {

        fb_signincllicked = fb_btn;

        callbackmanager = CallbackManager.Factory.create();
//        setupTokenTracker();
//        setupProfileTracker();
//        mTokenTracker.startTracking();
//        mProfileTracker.startTracking();
        // Set permissions
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));

        LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
//                AccessToken accessToken = loginResult.getAccessToken();
//                Profile profile = Profile.getCurrentProfile();
                final Set<String> deniedPermissions = loginResult.getRecentlyDeniedPermissions();

                GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject json, GraphResponse response) {

                        if (response.getError() != null) {
                            // handle error
                        } else {
                            try {

//                                if (deniedPermissions.contains("email")) {
//                                    LoginManager.getInstance().logInWithReadPermissions(Login_Activity.this, Arrays.asList("email"));
//                                }

                                JSONObject jsonObject = new JSONObject();
                                if (jsonObject.has("picture")) {
                                    String profilePicUrl = jsonObject.getJSONObject("picture").getJSONObject("data").getString("url");
                                    System.out.println("111015:profilePicUrl" + profilePicUrl);

                                } else {
                                    System.out.println("111015:profilePicUrl" + "No Data");

                                }
                                jsonObject.put("full_name", json.getString("name"));
                                Toast.makeText(getApplicationContext(), json.get("id").toString() + json.getString("name"), Toast.LENGTH_LONG).show();
                                jsonObject.put("device_id", Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID));
                                jsonObject.put("fb_id", json.getString("id"));
                                jsonObject.put("signuptype", "1");

                                Intent i = new Intent(getBaseContext(), Profile.class);
                                i.putExtra("prof_name", json.getString("name"));
                                i.putExtra("fb_id", json.getString("id"));

                                startActivity(i);
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).executeAsync();
            }

            @Override
            public void onCancel() {
                Log.d("Cancel", "On cancel");
            }

            @Override
            public void onError(FacebookException error) {
                Log.d("Error", error.toString());
            }
        });
    }


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

        if (fb_signincllicked) {
            callbackmanager.onActivityResult(requestCode, resultCode, data);
        }


    }
    @Override
    public void onStop() {
        super.onStop();
//        mTokenTracker.stopTracking();
//        mProfileTracker.stopTracking();
    }
//    private void setupTokenTracker() {
//        mTokenTracker = new AccessTokenTracker() {
//            @Override
//            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
//                Log.d("VIVZ", "" + currentAccessToken);
//            }
//        };
//    }
//
//    private void setupProfileTracker() {
//        mProfileTracker = new ProfileTracker() {
//            @Override
//            protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
//                Log.d("VIVZ", "" + currentProfile);
//            }
//        };
//    }
}

After success full login(which succeeded) i want to go to another activity.There i want to show the following, 成功完全登录后(成功)我想去另一个活动。我想要显示以下内容,

  1. Facebook profile picture in a custom image view(not in the image view which Facebook provided). 自定义图像视图中的Facebook个人资料图片(不在Facebook提供的图像视图中)。
  2. Primary-Email 主邮箱
  3. Phone Number(If user provided in Face Book) 电话号码(如果用户在Face Book中提供)
  4. Facebook link of the user. Facebook链接的用户。

Please help me. 请帮我。 Thanks in advance. 提前致谢。

On your onActivityCreated() put this code : 在你的onActivityCreated()上放了这段代码:

 @Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    updateWithToken(AccessToken.getCurrentAccessToken());
}

then here is my code which i'm currently using it to make facebook login : 那么这是我的代码,我正在使用它来登录facebook:

private void updateWithToken(AccessToken currentAccessToken) {

    mTokenTracker.startTracking();
    mProfileTracker.startTracking();

    if (currentAccessToken != null) {

        String accessToken = currentAccessToken
                .getToken();
        Log.i("accessToken", accessToken);

        GraphRequest request = GraphRequest.newMeRequest(
                currentAccessToken,
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(JSONObject object,
                                            GraphResponse response) {

                        Log.i("LoginActivity",
                                response.toString());
                        try {
                            String id = object.getString("id");
                            try {
                                URL profile_pic = new URL(
                                        "http://graph.facebook.com/" + id + "/picture?type=large");
                                Log.i("profile_pic",
                                        profile_pic + "");

                            } catch (MalformedURLException e) {
                                e.printStackTrace();
                            }
                            if (!sessionManagerFacebook.isLoggedIn()) {
                                sessionManagerFacebook.createLoginSession(object.getString("email"), getResources().getConfiguration().locale.toString());
                                if (cameFromQuestionExtra != null && cameFromQuestionExtra.getString("cameFromQuestion").equals("yes")) {

                                    getActivity().setResult(1);
                                    getActivity().finish();
                                }
                                //startActivity(new Intent(getActivity(), MainActivity.class));
                            } else {
                                user = sessionManagerFacebook.getUserDetails();
                                startActivity(new Intent(getActivity(), MainActivity.class));
                            }

                            getActivity().finish();

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

        Bundle parameters = new Bundle();
        parameters.putString("fields",
                "id,name,email,gender");
        request.setParameters(parameters);
        request.executeAsync();


    }


}

And on your second activity u just have to make new profile variable : 在你的第二个活动中你只需要创建新的配置文件变量:

Profile  profile = Profile.getCurrentProfile();
if (profile != null) {

        Toast.makeText(MainActivity.this, profile.getName(), Toast.LENGTH_SHORT).show();
        loadImages(profile.getProfilePictureUri(120, 120).toString());
        profileName.setText(profile.getName());

        mDrawer.getMenu().findItem(R.id.nav_myAccount).setVisible(false);
        Bundle extra = getIntent().getExtras();
        String email;
        if (extra != null) {
            email = extra.getString("email");
            profileEmail.setText(email);
            Toast.makeText(MainActivity.this, email, Toast.LENGTH_SHORT).show();
        } else if (sessionManagerFacebook.isLoggedIn()) {
            profileEmail.setText(userFacebook.get(SessionManagerFacebook.KEY_EMAIL));
            Toast.makeText(MainActivity.this, userFacebook.get(SessionManagerFacebook.KEY_EMAIL), Toast.LENGTH_SHORT).show();

        }

    }

https://developers.facebook.com/docs/reference/android/current/class/Profile/ https://developers.facebook.com/docs/reference/android/current/class/Profile/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在facebook SDK Android中获取用户的facebook个人资料图片 - How to get facebook profile picture of user in facebook SDK Android 如何在facebook SDK 3.0 Android中获取用户的facebook个人资料图片 - How to get facebook profile picture of user in facebook SDK 3.0 Android Facebook android sdk 4. *-如何获取登录的用户电子邮件? - Facebook android sdk 4.* - How can I get the logged in user E-mail? 如何在 Android 上通过登录 Facebook 获取用户电子邮件 - How get user E-mail with Login Facebook on Android 如何使用Facebook SDK中的ProfilePictureView在android应用中显示已登录用户的个人资料图片? - How to display logged in user's profile picture in android app using ProfilePictureView from Facebook SDK? 如何从Android App获取Facebook个人资料图片? - How to get Facebook profile picture from Android App? Android,Facebook SDK获取个人资料图片失败 - Android, Facebook SDK get profile picture fail 如何使用Facebook的Unity SDK获取用户的个人资料照片? - How to get user's profile picture with Facebook's Unity SDK? 如何登录用户个人资料图片。 Facebook SDK 3.5 - How to get logged in user profile picture. Facebook SDK 3.5 如何通过电子邮件中的链接启动Android应用(GMail) - How to launch Android app from link in an e-mail (GMail)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM