当前位置: 首页 > 面试题库 >

Android Facebook SDK 4.X,如何获取电子邮件地址和Facebook访问令牌以将其传递到Web服务

楚灿
2023-03-14
问题内容

编辑:我的问题是如何使用Facebook SDK 4.X获取电子邮件,UserId,Facebook身份验证,此刻,借助Ming
Respond,我知道如何获取电子邮件,用户ID,所以我的问题是如何获取Facebook身份验证,因为Session和GraphUser刚被LoginManager和AccessToken取代,没有关于它的信息吗?

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.Profile;
import com.facebook.ProfileTracker;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import java.util.Arrays;

public class RegisterActivity extends Activity {
    private String fbUserID;
    private String fbProfileName;
    private String fbAuthToken;
    private LoginButton fbLoginBtn;
    private static final String TAG = "FacebookLogin";
    CallbackManager callbackManager;
    private AccessTokenTracker accessTokenTracker;
    private ProfileTracker profileTracker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_activity);
        fbLoginBtn = (LoginButton) findViewById(R.id.connect_with_facebook_button);
        fbLoginBtn.setReadPermissions(Arrays.asList("email", "user_photos", "public_profile"));
        fbLoginBtn.setBackgroundResource(R.drawable.connect_facebook_button);


        accessTokenTracker = new AccessTokenTracker() {
            @Override
            protected void onCurrentAccessTokenChanged(
                    AccessToken oldAccessToken,
                    AccessToken currentAccessToken) {
                fbAuthToken = currentAccessToken.getToken();
                fbUserID = currentAccessToken.getUserId();


                Log.d(TAG, "User id: " + fbUserID);
                Log.d(TAG, "Access token is: " + fbAuthToken);


            }
        };

        profileTracker = new ProfileTracker() {
            @Override
            protected void onCurrentProfileChanged(
                    Profile oldProfile,
                    Profile currentProfile) {
                fbProfileName = currentProfile.getName();

                Log.d(TAG, "User name: " + fbProfileName );
            }
        };


        fbLoginBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

            }

            @Override
            public void onCancel() {
                // App code
            }

            @Override
            public void onError(FacebookException exception) {
                // App code
            }
        });

    }


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



    }

GraphRequest request = GraphRequest.newMeRequest(
        accessToken,
        new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                    JSONObject user,
                    GraphResponse response) {
                String id = user.optString("id");
                String firstName = user.optString("first_name");
                String lastName = user.optString("last_name");
                String email = user.optString("email");

            }

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

问题答案:
fbLoginBtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        GraphRequest.newMeRequest(
            loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject me, GraphResponse response) {
                    if (response.getError() != null) {
                        // handle error
                    } else {
                        String email = me.optString("email");
                        String id = me.optString("id");
                        // send email and id to your web server
                    }
                }
            }).executeAsync();
    }

    @Override
    public void onCancel() {
        // App code
    }

    @Override
    public void onError(FacebookException exception) {
        // App code
    }
});


 类似资料:
  • 如何从 login.microsoftonline.com 获取AD访问令牌并将访问令牌传递给Web api控制器?因为我需要“访问令牌”才能通过 post 请求传递到另一个合作伙伴公司网站 URL。 下面的代码按照预期进行AAD认证,但我也需要“访问令牌”,

  • 嗨,我正在尝试从给定的令牌获取电子邮件用户。我尝试过这样来解析令牌,但根据以下示例,我总是得到空值或值: 我将令牌放在url上,就像这样localhost:8000/admin/user/get_all?token={{token},我还将令牌作为添加到头中注意:我正在使用postman发出请求。但是当我尝试将解析值传递给响应时,我总是得到值: 如果我错了,请纠正我:解析的意思是获取身份验证用户的

  • 我们正在获取作用域的访问令牌:'https://outlook.office.com/EWS.AccessAsUser.Alloffline\u access'。 不幸的是,https://login.microsoftonline.com/common/oauth2/v2.0/token的响应不包含id_token或类似的内容。 因此,问题是如何使用访问令牌获取用户名(电子邮件地址或unique

  • 问题内容: 在PHP中,我有一个像这样的字符串: 我如何仅获取电子邮件地址?有什么简单的方法来获取价值? 问题答案: 如果您不确定用空格分隔的字符串的哪一部分是电子邮件地址,则可以将字符串按空格分隔并使用 在每个子串上。

  • 我正在使用MEAN stack构建的SPA中实现fb身份验证。虽然我已经使用facebook token passport策略成功实现了fb身份验证,但我在保护APIendpoint方面遇到了问题。因为为此,我需要在$http服务中同时传递经过身份验证的用户对象和访问令牌,并且我已经尝试将访问令牌作为用户对象的属性和头属性传递,但仍然是401(未经授权的错误)。下面是我的代码片段。 护照留档显示“

  • 问题内容: 我正在使用Graph API,但无法弄清楚如何获取登录用户的电子邮件地址。 Graph简介指出:“ Graph API可以提供您通常会以注册表格形式请求的所有基本帐户注册数据的访问权限,包括名称,电子邮件地址,个人资料图片和生日” 很好,但是如何访问该信息? 这是我到目前为止的内容: 问题答案: 获取用户电子邮件地址的唯一方法是在电子邮件字段上请求扩展权限。用户必须允许您看到此内容,并