【问题标题】:how to get unique id and profile info in social auth in integration for facebook如何在 Facebook 集成中获取社交身份验证中的唯一 ID 和个人资料信息
【发布时间】:2015-03-24 08:51:26
【问题描述】:

我已经实现了社交身份验证以集成 facebook,现在我想获取用户个人资料信息和唯一 ID。我已获得访问令牌但无法获取用户个人资料信息。我已通过以下方式实现它 公共类 SignUp 扩展 Activity 实现 OnClickListener { 私人EditText email_mEditText,password_mEditText;

SocialAuthAdapter socialAuthAdapter;
private RelativeLayout facebook_layout, twitter_layout, googleplus_layout, linkdin_layout;
private Button signIn_mButton;
String email_mString, password_mString;
private ImageView backIcon_mImageView, logoIcon_mImageView;
private TextView forgotpassword_mTextView;
 String emailid_mString ;
 EditText emailid_mEt;
 Button submit_mbtn;
 Dialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sign_up);
    signIn_mButton = (Button) findViewById(R.id.signin_button);
    email_mEditText = (EditText) findViewById(R.id.email_editText);
    password_mEditText = (EditText) findViewById(R.id.password_editText);
    backIcon_mImageView = (ImageView) findViewById(R.id.backicon_imageView);
    logoIcon_mImageView = (ImageView) findViewById(R.id.logoicon_imageView);

    facebook_layout = (RelativeLayout) findViewById(R.id.facebook_layout);
    twitter_layout = (RelativeLayout) findViewById(R.id.twitter_layout);
    googleplus_layout = (RelativeLayout) findViewById(R.id.google_layout);
    linkdin_layout = (RelativeLayout) findViewById(R.id.linkdin_layout);
    facebook_layout.setOnClickListener(this);
    twitter_layout.setOnClickListener(this);
    googleplus_layout.setOnClickListener(this);
    linkdin_layout.setOnClickListener(this);

    socialAuthAdapter = new SocialAuthAdapter(new ResponseListener());
    signIn_mButton.setOnClickListener(this);
    backIcon_mImageView.setOnClickListener(this);
    logoIcon_mImageView.setOnClickListener(this);
    forgotpassword_mTextView = (TextView) findViewById(R.id.forgotpassword_textView);
    forgotpassword_mTextView.setPaintFlags(forgotpassword_mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
    forgotpassword_mTextView.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.signin_button:

        email_mString = email_mEditText.getText().toString();
        password_mString = password_mEditText.getText().toString();
        if ((email_mString.isEmpty()) && (password_mString.isEmpty())) {
            email_mEditText.addTextChangedListener(new TextWatcher() {
                @Override
                public void afterTextChanged(Editable s) {

                }

                @Override
                public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                    // TODO Auto-generated method stub
                     email_mEditText.setError("Value required");
                }

                @Override
                public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                    // TODO Auto-generated method stub
                     email_mEditText.setError(null);
                }
            });


        } else if ((email_mString.isEmpty())) {
            email_mEditText.setError("Please Enter the Email ");

        } else if ((password_mString.isEmpty())) {
             password_mEditText.setError("Please Enter the Password ");
        } else {

            Log.d("u r", "ur in else part");
            new Thread(null, threadEventListing, "").start();

        }
        break;
    case R.id.backicon_imageView:
        Intent signInIntent = new Intent(SignUp.this, SignIn.class);
        startActivity(signInIntent);
        overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
        finish();
        break;
    case R.id.logoicon_imageView:
        Intent signIntent = new Intent(SignUp.this, SignIn.class);
        startActivity(signIntent);
        overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
        finish();
        break;
    case R.id.forgotpassword_textView:

        Log.d("hello", "u clicked FOrgot textview");
        dialog = new Dialog(this);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.forgot_password);
        emailid_mEt=(EditText)dialog.findViewById(R.id.etforgotpassword);
        submit_mbtn=(Button)dialog.findViewById(R.id.btnsubmit);
        submit_mbtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                emailid_mString = emailid_mEt.getText().toString();
                new Thread(null,threadForgotPassword,"").start();
            }
        });
        dialog.show();

        break;
    case R.id.facebook_layout:

        socialAuthAdapter.authorize(SignUp.this, Provider.FACEBOOK);
        socialAuthAdapter.signOut(this, Provider.FACEBOOK.toString());

        break;

    case R.id.twitter_layout:

        socialAuthAdapter.authorize(SignUp.this, Provider.TWITTER);
        socialAuthAdapter.signOut(this, Provider.TWITTER.toString());

        break;

    case R.id.google_layout:
        socialAuthAdapter.authorize(SignUp.this, Provider.GOOGLEPLUS);
        socialAuthAdapter.signOut(this, Provider.GOOGLEPLUS.toString());

        break;

    case R.id.linkdin_layout:
        socialAuthAdapter.authorize(SignUp.this, Provider.LINKEDIN);
        socialAuthAdapter.signOut(this, Provider.LINKEDIN.toString());
        break;
    }

}

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    Intent signInIntent = new Intent(SignUp.this, SignIn.class);
    startActivity(signInIntent);
    overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
    finish();
}

private final class ResponseListener implements DialogListener {
    public void onComplete(Bundle values) {
        Log.d("tag", "In on comppleter");

        String token = socialAuthAdapter.getCurrentProvider().getAccessGrant().getKey();
        Log.d("Token", token);

    }

    @Override
    public void onBack() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onCancel() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onError(SocialAuthError arg0) {
        // TODO Auto-generated method stub

    }

}

}

【问题讨论】:

    标签: android integration socialauth


    【解决方案1】:

    使用此代码

    public class MainFragment extends Fragment {
    
        private static final String TAG = "MainFragment";
        private UiLifecycleHelper uiHelper;
    
        private Session.StatusCallback callback = new Session.StatusCallback() {
    
            @Override
            public void call(Session session, SessionState state, Exception exception) {
    
                onSessionStateChange(session, state, exception);
            }
        };
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            uiHelper = new UiLifecycleHelper(getActivity(), callback);
            uiHelper.onCreate(savedInstanceState);
    
            View view = inflater.inflate(R.layout.main, container, false);
    
            LoginButton authButton = (LoginButton)  view.findViewById(R.id.authButton);
            authButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_location"));
    
            authButton.setFragment(this);
            return view;
        }
    
        private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    
            if (state.isOpened()) {
    
                Log.i(TAG, "Logged in...");
                makeMeRequest(session);
            } else if (state.isClosed()) {
    
                Log.i(TAG, "Logged out...");
            }
        }
    
        private void makeMeRequest(final Session session) {
    
            // Make an API call to get user data and define a
            // new callback to handle the response.
            Request request = Request.newMeRequest(session, new Request.GraphUserCallback() {
    
                /*
                 * @Override public void onCompleted(GraphUser user, Response
                 * response) { // If the response is successful if (session ==
                 * Session.getActiveSession()) { if (user != null) { // Set the
                 * id for the ProfilePictureView // view that in turn displays
                 * the profile picture. Log.e("user",user.toString()); } } if
                 * (response.getError() != null) { // Handle errors, will do so
                 * later. } }
                 */
    
                @Override
                public void onCompleted(GraphUser user, Response response) {
    
                    // TODO Auto-generated method stub
                    Log.e("FB Return", user.toString());
                    Log.e("FullName", user.getName());
                    Log.e("Id", user.getId());
                    Log.e("username", "" + user.getUsername());
                    Log.e("Fname", user.getFirstName());
                    Log.e("Fname", user.getLastName());
                    Log.e("gender", user.asMap().get("gender").toString());
    
                    String gender = user.asMap().get("gender").toString();
                    String email = (String) user.asMap().get("email") + "";
                    Log.e("email", email);
                }
            });
            request.executeAsync();
        }
    
        @Override
        public void onResume() {
    
            super.onResume();
            // For scenarios where the main activity is launched and user
            // session is not null, the session state change notification
            // may not be triggered. Trigger it if it's open/closed.
            Session session = Session.getActiveSession();
            if (session != null && (session.isOpened() || session.isClosed())) {
    
                onSessionStateChange(session, session.getState(), null);
            }
            uiHelper.onResume();
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            super.onActivityResult(requestCode, resultCode, data);
            uiHelper.onActivityResult(requestCode, resultCode, data);
        }
    
        @Override
        public void onPause() {
    
            super.onPause();
            uiHelper.onPause();
        }
    
        @Override
        public void onDestroy() {
    
            super.onDestroy();
            uiHelper.onDestroy();
        }
    
        @Override
        public void onSaveInstanceState(Bundle outState) {
    
            super.onSaveInstanceState(outState);
            uiHelper.onSaveInstanceState(outState);
        }
    }
    

    【讨论】:

    • 我知道如何存储和获取会话..我正在谈论在 android 中使用#SocialAuth lib 时如何获取用户个人资料信息和唯一 ID 以集成 fb
    • 按照方法 public void onCompleted(GraphUser user, Response response){ ============ }
    • 现在请检查我是如何实现@Avishek Das
    【解决方案2】:

    由于你使用的是社交验证,所以你可以试试这个:

    private final class ProfileDataListener implements SocialAuthListener {
    
    @Override
    public void onExecute(Profile t) {
    
      Log.d("Custom-UI", "Receiving Data");
      Profile profileMap = t;
      Log.d("Custom-UI",  "Validate ID = " + profileMap.getValidatedId());
      Log.d("Custom-UI",  "First Name  = " + profileMap.getFirstName());
      Log.d("Custom-UI",  "Last Name  = " + profileMap.getLastName());
      Log.d("Custom-UI",  "Email  = " + profileMap.getEmail());
      Log.d("Custom-UI",  "Gender  = " + profileMap.getGender());
      Log.d("Custom-UI",  "Country  = " + profileMap.getCountry());
      Log.d("Custom-UI",  "Language  = " + profileMap.getLanguage());
      Log.d("Custom-UI",  "Location  = " + profileMap.getLocation());
      Log.d("Custom-UI",  "Profile Image URL = " + profileMap.getProfileImageURL()); }
    

    【讨论】:

    • 我试过了..但这对我有用..@gautam joshi
    • 我想问我什么时候实现那个方法..在 onExecute 它有 2 个参数我如何处理这个 public void onExcute(String srt,Object obj){
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2018-03-22
    相关资源
    最近更新 更多