使用Android Studio&;时出现登录错误;火基
在Android Studio中构建apk后,我的应用程序停止在登录页面。我有3种登录方法:Facebook、Google和guest 当我单击这些方法中的任何一个时,都不会发生任何事情 我错了: 登录活动:使用Android Studio&;时出现登录错误;火基,android,android-layout,android-studio,firebase-realtime-database,facebook-login,Android,Android Layout,Android Studio,Firebase Realtime Database,Facebook Login,在Android Studio中构建apk后,我的应用程序停止在登录页面。我有3种登录方法:Facebook、Google和guest 当我单击这些方法中的任何一个时,都不会发生任何事情 我错了: 登录活动: public class SignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { private static final int RC_SI
public class SignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private static final int RC_SIGN_IN = 9001;
private static String TAG = "SignInActivity:";
@Bind(R.id.sign_in_button)
Button signInGoogle;
@Bind(R.id.sign_in_anon)
Button signInAnonym;
@Bind(R.id.coordinator)
RelativeLayout vCoordinatorLayout;
@Bind(R.id.sign_in_button_fb)
Button signInFacebook;
ProgressDialog mProgressDialog;
private FirebaseAuth mFAuth;
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private FirebaseUser mFUser;
private CallbackManager callbackManager;
AuthCredential credential;
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
private void setupWindowAnimations() {
Explode slide;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
slide = new Explode();
slide.setDuration(1000);
getWindow().setExitTransition(slide);
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity_sign_in);
SharedPreferences settings = getSharedPreferences("firstTime", MODE_PRIVATE);
boolean firstTime = settings.getBoolean("first_launch", true); //0 is the default valu
if(firstTime){
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("first_launch", false);
editor.apply();
}
ButterKnife.bind(this);
setupWindowAnimations();
mFAuth = FirebaseAuth.getInstance();
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(getString(R.string.signing_in));
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getApplicationContext(), "" + error.getMessage(), Toast.LENGTH_LONG).show();
alertLoginFailed("facebook");
}
});
// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
mFUser = firebaseAuth.getCurrentUser();
if (mFUser != null) {
Intent intent = new Intent(SignInActivity.this, MainActivity.class);
intent.putExtra("prov", prov);
startActivity(intent);
SignInActivity.this.finish();
} else {
Log.d(Constants.TAG_PARENT, TAG + "onAuthStateChanged:userLogout");
}
}
};
}
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
mProgressDialog.show();
credential = FacebookAuthProvider.getCredential(token.getToken());
mFAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.w(Constants.TAG_PARENT, TAG + "signInWithCredential", task.getException());
showToast(getString(R.string.auth_failed));
}
prov = "Facebook";
mProgressDialog.dismiss();
}
});
}
@OnClick(R.id.sign_in_button_fb)
void loginWithFacebook(){
signInFacebook();
}
@OnClick(R.id.sign_in_button)
void setSignInGoogle() {
mProgressDialog.show();
signInGoogle();
}
private void signInFacebook() {
LoginManager
.getInstance()
.logInWithReadPermissions(
this,
Arrays.asList("public_profile", "user_friends", "email")
);
}
@OnClick(R.id.sign_in_anon)
void setSignInAnonym() {
mProgressDialog.show();
mFAuth.signInAnonymously()
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.w(Constants.TAG_PARENT, TAG + "signInAnonymously", task.getException());
alertLoginFailed("anon");
}
mProgressDialog.dismiss();
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e(Constants.TAG_PARENT, TAG + "onConnectionFailed:" + connectionResult);
showToast(getString(R.string.play_error));
}
private void signInGoogle() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onStart() {
super.onStart();
mFAuth.addAuthStateListener(mAuthStateListener);
}
String prov;
public void alertLoginFailed(final String cred) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setMessage(R.string.login_failed);
alertDialog.setPositiveButton(R.string.try_again, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(cred.equals("google")){
signInGoogle();
}else if(cred.equals("facebook")){
signInFacebook();
}
dialog.dismiss();
}
});
alertDialog.setNegativeButton(R.string.quit_app, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
alertDialog.setCancelable(false);
alertDialog.show();
}
@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);
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
prov = "Google";
} else {
alertLoginFailed("google");
}
}else{
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
mProgressDialog.show();
credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mFAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.w(Constants.TAG_PARENT, TAG + "signInWithCredential", task.getException());
showToast(getString(R.string.auth_failed));
}
mProgressDialog.dismiss();
}
});
}
protected void showToast(String text) {
Snackbar snackbar = Snackbar
.make(vCoordinatorLayout, text, Snackbar.LENGTH_LONG);
snackbar.show();
}
}
public class SignInActivity扩展AppCompativity实现GoogleAppClient.OnConnectionFailedListener{
专用静态最终输入RC\U符号\U IN=9001;
私有静态字符串TAG=“SignInActivity:”;
@绑定(R.id.登录按钮)
按钮登录日志;
@绑定(R.id.sign\u in\u anon)
按钮符号;
@绑定(R.id.coordinator)
相对坐标布局;
@绑定(R.id.登录按钮)
按钮标志Facebook;
进程对话框;
私有FirebaseAuth mFAuth;
私人GoogleapClient MGoogleapClient;
私有FirebaseAuth.AuthStateListener mAuthStateListener;
私有FirebaseUser-mFUser;
私人CallbackManager CallbackManager;
认证证书;
@凌驾
受保护的void attachBaseContext(Context newBase){
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
私有void setupWindowAnimations(){
爆破滑梯;
if(android.os.Build.VERSION.SDK\u INT>=android.os.Build.VERSION\u code.LOLLIPOP){
幻灯片=新的分解();
幻灯片。设置持续时间(1000);
getWindow().setExitTransition(幻灯片);
}
}
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main\u activity\u sign\u in);
SharedReferences设置=获取SharedReferences(“第一次”,模式\私有);
boolean firstTime=settings.getBoolean(“first_launch”,true);//0是默认值
如果(第一次){
SharedReferences.Editor=settings.edit();
编辑器.putBoolean(“首次发布”,错误);
editor.apply();
}
把(这个)绑起来;
设置窗口动画();
mFAuth=FirebaseAuth.getInstance();
mProgressDialog=新建进度对话框(此);
设置消息(getString(R.string.signing_in));
mProgressDialog.setProgressStyle(ProgressDialog.STYLE\u微调器);
sdkinInitialize(this.getApplicationContext());
callbackManager=callbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,new FacebookCallback()){
@凌驾
成功时公共无效(LoginResult LoginResult){
handleFacebookAccessToken(loginResult.getAccessToken());
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常错误){
Toast.makeText(getApplicationContext(),“”+error.getMessage(),Toast.LENGTH\u LONG.show();
alertLoginFailed(“facebook”);
}
});
//配置谷歌登录
GoogleSignenOptions gso=新建GoogleSignenOptions.Builder(GoogleSignenOptions.DEFAULT\u登录)
.requestIdToken(getString(R.string.default\u web\u client\u id))
.requestEmail()
.build();
mgoogleapclient=新的Googleapclient.Builder(此)
.enableAutoManage(这个,这个)
.addApi(Auth.GOOGLE\u SIGN\u IN\u API,gso)
.build();
mAuthStateListener=new FirebaseAuth.AuthStateListener(){
@凌驾
AuthStateChanged上的公共void(@NonNull FirebaseAuth FirebaseAuth){
mFUser=firebaseAuth.getCurrentUser();
if(mFUser!=null){
意向意向=新意向(SignInActivity.this,MainActivity.class);
意向。额外(“prov”,prov);
星触觉(意向);
signalivity.this.finish();
}否则{
Log.d(Constants.TAG_PARENT,TAG+“onAuthStateChanged:userLogout”);
}
}
};
}
私有无效handleFacebookAccessToken(AccessToken令牌){
Log.d(标记“handleFacebookAccessToken:”+token);
mProgressDialog.show();
credential=FacebookAuthProvider.getCredential(token.getToken());
mFAuth.signInWithCredential(凭证)
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
如果(!task.issusccessful()){
Log.w(Constants.TAG_PARENT,TAG+“signInWithCredential”,task.getException());
showtoos(getString(R.string.auth_失败));
}
prov=“Facebook”;
mProgressDialog.disclose();
}
});
}
@OnClick(R.id.登录按钮)
void loginWithFacebook(){
signInFacebook();
}
@OnClick(R.id.sign\u in\u按钮)
void setSigningLogle(){
mProgressDialog.show();
签名日志();
}
私人无效登录Facebook(){
登录管理员
.getInstance()
.logInWithReadPermissions(
这
Arrays.asList(“公共配置文件”、“用户朋友”、“电子邮件”)
);
}
@OnClick(R.id.sign\u in\n)
void setsigninanoym(){
mProgressDialog.show();
mFAuth.signinanoymously()
.addOnCompleteListener(这是新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
如果(!task.issusccessful()){
Log.w(Constants.TAG_PARENT,TAG+“signinanoymously”,task.getException());
警报登录失败(“anon”);
public class SignInActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
private static final int RC_SIGN_IN = 9001;
private static String TAG = "SignInActivity:";
@Bind(R.id.sign_in_button)
Button signInGoogle;
@Bind(R.id.sign_in_anon)
Button signInAnonym;
@Bind(R.id.coordinator)
RelativeLayout vCoordinatorLayout;
@Bind(R.id.sign_in_button_fb)
Button signInFacebook;
ProgressDialog mProgressDialog;
private FirebaseAuth mFAuth;
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth.AuthStateListener mAuthStateListener;
private FirebaseUser mFUser;
private CallbackManager callbackManager;
AuthCredential credential;
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
private void setupWindowAnimations() {
Explode slide;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
slide = new Explode();
slide.setDuration(1000);
getWindow().setExitTransition(slide);
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity_sign_in);
SharedPreferences settings = getSharedPreferences("firstTime", MODE_PRIVATE);
boolean firstTime = settings.getBoolean("first_launch", true); //0 is the default valu
if(firstTime){
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("first_launch", false);
editor.apply();
}
ButterKnife.bind(this);
setupWindowAnimations();
mFAuth = FirebaseAuth.getInstance();
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(getString(R.string.signing_in));
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
handleFacebookAccessToken(loginResult.getAccessToken());
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
Toast.makeText(getApplicationContext(), "" + error.getMessage(), Toast.LENGTH_LONG).show();
alertLoginFailed("facebook");
}
});
// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
mAuthStateListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
mFUser = firebaseAuth.getCurrentUser();
if (mFUser != null) {
Intent intent = new Intent(SignInActivity.this, MainActivity.class);
intent.putExtra("prov", prov);
startActivity(intent);
SignInActivity.this.finish();
} else {
Log.d(Constants.TAG_PARENT, TAG + "onAuthStateChanged:userLogout");
}
}
};
}
private void handleFacebookAccessToken(AccessToken token) {
Log.d(TAG, "handleFacebookAccessToken:" + token);
mProgressDialog.show();
credential = FacebookAuthProvider.getCredential(token.getToken());
mFAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.w(Constants.TAG_PARENT, TAG + "signInWithCredential", task.getException());
showToast(getString(R.string.auth_failed));
}
prov = "Facebook";
mProgressDialog.dismiss();
}
});
}
@OnClick(R.id.sign_in_button_fb)
void loginWithFacebook(){
signInFacebook();
}
@OnClick(R.id.sign_in_button)
void setSignInGoogle() {
mProgressDialog.show();
signInGoogle();
}
private void signInFacebook() {
LoginManager
.getInstance()
.logInWithReadPermissions(
this,
Arrays.asList("public_profile", "user_friends", "email")
);
}
@OnClick(R.id.sign_in_anon)
void setSignInAnonym() {
mProgressDialog.show();
mFAuth.signInAnonymously()
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.w(Constants.TAG_PARENT, TAG + "signInAnonymously", task.getException());
alertLoginFailed("anon");
}
mProgressDialog.dismiss();
}
});
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.e(Constants.TAG_PARENT, TAG + "onConnectionFailed:" + connectionResult);
showToast(getString(R.string.play_error));
}
private void signInGoogle() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
@Override
public void onStart() {
super.onStart();
mFAuth.addAuthStateListener(mAuthStateListener);
}
String prov;
public void alertLoginFailed(final String cred) {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setMessage(R.string.login_failed);
alertDialog.setPositiveButton(R.string.try_again, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if(cred.equals("google")){
signInGoogle();
}else if(cred.equals("facebook")){
signInFacebook();
}
dialog.dismiss();
}
});
alertDialog.setNegativeButton(R.string.quit_app, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
});
alertDialog.setCancelable(false);
alertDialog.show();
}
@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);
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
firebaseAuthWithGoogle(account);
prov = "Google";
} else {
alertLoginFailed("google");
}
}else{
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
mProgressDialog.show();
credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
mFAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Log.w(Constants.TAG_PARENT, TAG + "signInWithCredential", task.getException());
showToast(getString(R.string.auth_failed));
}
mProgressDialog.dismiss();
}
});
}
protected void showToast(String text) {
Snackbar snackbar = Snackbar
.make(vCoordinatorLayout, text, Snackbar.LENGTH_LONG);
snackbar.show();
}
}