我有一个现有的Android应用程序,你可以创建和帐户,并通过用户名/电子邮件和密码登录,现在我希望能够创建一个帐户,并使用谷歌或Facebook等社交平台登录。
我的Android应用程序通过我们制作的NodeJS API连接到数据库。此API有一个xxxxx / authenticate路由,您可以在其中发送电子邮件/用户名和密码,并返回令牌。
我的问题是如何将Google和Facebook登录添加到我们拥有的此设置中并添加会话管理。
我已经尝试this并且我已经能够通过Google登录了,但我的问题是我的所有API查询都受到了令牌保护,我被困在这里现在。
我不知道是否必须修改API才能接受来自Google和Facebook的令牌,或尝试在应用级别上处理所有令牌。
对此事的任何启示或建议都将非常感激。
感谢。
答案 0 :(得分:1)
这适用于google plus
您需要在项目中添加一些权限ans库。
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) {
}
}