将社交登录(谷歌和facebook)添加到现有Android登录

将社交登录(谷歌和facebook)添加到现有Android登录,android,node.js,facebook-login,google-login,Android,Node.js,Facebook Login,Google Login,我有一个现有的安卓应用程序,你可以通过用户名/电子邮件和密码创建帐户和登录,现在我希望能够创建一个帐户并使用谷歌或Facebook等社交平台登录 我的Android应用程序通过我们制作的NodeJSAPI连接到DB。此API有一个发送电子邮件/用户名和密码的路径xxxxx/authenticate,并返回一个令牌 我的问题是如何将Google和Facebook登录添加到我们现有的设置中,并添加会话管理 我已经尝试过这样做,并且能够通过谷歌登录,但我的问题是,我所有的API查询都受到令牌保护,我现

我有一个现有的安卓应用程序,你可以通过用户名/电子邮件和密码创建帐户和登录,现在我希望能够创建一个帐户并使用谷歌或Facebook等社交平台登录

我的Android应用程序通过我们制作的NodeJSAPI连接到DB。此API有一个发送电子邮件/用户名和密码的路径xxxxx/authenticate,并返回一个令牌

我的问题是如何将Google和Facebook登录添加到我们现有的设置中,并添加会话管理

我已经尝试过这样做,并且能够通过谷歌登录,但我的问题是,我所有的API查询都受到令牌保护,我现在被困在这里

我不知道我是否必须修改API才能接受来自Google和Facebook的代币,或者尝试在应用程序级别处理所有这些

对此问题的任何提示或建议都将不胜感激

谢谢

这是谷歌+ 您需要在项目中添加一些权限ans库

公共类MainActivity扩展AppCompativeActivity实现View.OnClickListener、GoogleAppClient.OnConnectionFailedListener{
私人签名按钮签名按钮;
谷歌私人签名gso;
私人GoogleapClient MGoogleapClient;
私有内部RC_符号=100;
私有文本视图文本视图名称;
私人文本视图文本视图电子邮件;
专用网络图像视图profilePhoto;
私有图像加载器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textViewName=(TextView)findViewById(R.id.textViewName);
textViewEmail=(TextView)findViewById(R.id.textViewEmail);
//profilePhoto=(NetworkImageView)findViewById(R.id.profileImage);
gso=新建GoogleSignionOptions.Builder(GoogleSignionOptions.DEFAULT_SIGN_IN).requestEmail().build();
signInButton=(signInButton)findViewById(R.id.sign_in_按钮);
signInButton.setSize(signInButton.SIZE_宽);
设置范围(gso.getScopeArray());
mGoogleApiClient=new GoogleApiClient.Builder(this).enableautomanager(this/*FragmentActivity*/,this/*OnConnectionFailedListener*/)。
addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.build();
signInButton.setOnClickListener(此);
}
私人无效签名(){
意向符号=Auth.googlesignianpi.getsignient(mgoogleapclient);
startActivityForResult(签名、注册);
}
公共作废注销(视图){
Auth.GoogleSignInApi.signOut(mgoogleapclient.setResultCallback)(
新的ResultCallback(){
@凌驾
公共void onResult(状态){
Toast.makeText(getApplicationContext(),“成功注销”,Toast.LENGTH\u LONG.show();
textViewName.setText(“”);
textViewEmail.setText(“”);
}
});
//Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient.setResultCallback)(
//新的ResultCallback(){
//@覆盖
//公共void onResult(状态){
//                        // ...
//                    }
//                });
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RC\u登录){
GoogleSignInResult结果=Auth.GoogleSignInApi.getSignInResultFromIntent(数据);
handleSignInResult(结果);
}
}
私有无效handleSignInResult(Google SignInResult结果){
if(result.issucess()){
GoogleSignInAccount acct=result.getSignInAccount();
textViewName.setText(acct.getDisplayName());
textViewEmail.setText(acct.getEmail());
//Toast.makeText(这个,acct.get)
//初始化图像加载器
//imageLoader=CustomVolleyRequest.getInstance(this.getApplicationContext())
//.getImageLoader();
//
//imageLoader.get(acct.getPhotoUrl().toString(),
//ImageLoader.getImageListener(profilePhoto,
//R.mipmap.ic_发射器,
//R.mipmap.ic_启动器);
//
////正在加载图像
//profilePhoto.setImageUrl(acct.getPhotoUrl().toString(),imageLoader);
}否则{
Toast.makeText(这个“登录失败”,Toast.LENGTH_LONG.show();
}
}
@凌驾
公共void onClick(视图v){
如果(v==符号按钮){
签名();
}
}
@凌驾
公共无效onConnectionFailed(ConnectionResult ConnectionResult){
}
}

我已经更新了帖子上的链接。我已经有了你提到的这个,我可以通过谷歌登录,我的问题是如何获得任何令牌来访问我的其他API路由,这些API路由受令牌保护,通常在我通过API使用电子邮件和密码登录时提供此令牌。当你拥有经过身份验证的帐户时,你的API会在响应时发送令牌,如果是这样,那么,如果有人试图登录facebook或google,首先检查与DB相关的电子邮件,如果不是,则将他们转发到注册活动以创建帐户。。稍后链接他们的帐户,下次如果他们试图登录fb或谷歌。。。它将在数据库上,因此通过提供
public class MainActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener {

        private SignInButton signInButton;
        private GoogleSignInOptions gso;
        private GoogleApiClient mGoogleApiClient;
        private int RC_SIGN_IN = 100;
        private TextView textViewName;
        private TextView textViewEmail;
        private NetworkImageView profilePhoto;
        private ImageLoader imageLoader;

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

            textViewName = (TextView) findViewById(R.id.textViewName);
            textViewEmail = (TextView) findViewById(R.id.textViewEmail);
    //        profilePhoto = (NetworkImageView) findViewById(R.id.profileImage);
            gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();
            signInButton = (SignInButton) findViewById(R.id.sign_in_button);
            signInButton.setSize(SignInButton.SIZE_WIDE);
            signInButton.setScopes(gso.getScopeArray());
            mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */).
                    addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                    .build();
            signInButton.setOnClickListener(this);
        }
        private void signIn() {
            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
        public void sign_out(View view) {
            Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                    new ResultCallback<Status>() {
                        @Override
                        public void onResult(Status status) {
                            Toast.makeText(getApplicationContext(), "SIGN OUT SUCESSFULLY", Toast.LENGTH_LONG).show();
                            textViewName.setText("");
                            textViewEmail.setText("");
                        }
                    });
    //        Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
    //                new ResultCallback<Status>() {
    //                    @Override
    //                    public void onResult(Status status) {
    //                        // ...
    //                    }
    //                });

        }
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == RC_SIGN_IN) {
                GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
                handleSignInResult(result);
            }
        }

        private void handleSignInResult(GoogleSignInResult result) {
            if (result.isSuccess()) {
                GoogleSignInAccount acct = result.getSignInAccount();
                textViewName.setText(acct.getDisplayName());
                textViewEmail.setText(acct.getEmail());
    //            Toast.makeText(this,acct.get)

                //Initializing image loader
    //            imageLoader = CustomVolleyRequest.getInstance(this.getApplicationContext())
    //                    .getImageLoader();
    //
    //            imageLoader.get(acct.getPhotoUrl().toString(),
    //                    ImageLoader.getImageListener(profilePhoto,
    //                            R.mipmap.ic_launcher,
    //                            R.mipmap.ic_launcher));
    //
    //            //Loading image
    //            profilePhoto.setImageUrl(acct.getPhotoUrl().toString(), imageLoader);

            } else {
                Toast.makeText(this, "Login Failed", Toast.LENGTH_LONG).show();
            }
        }

        @Override
        public void onClick(View v) {
            if (v == signInButton) {
                signIn();
            }
        }

        @Override
        public void onConnectionFailed(ConnectionResult connectionResult) {

        }
    }