java - Firebase 身份验证要求更新 google play 服务
问题描述
我想创建一个 EmailPassword 身份验证页面,因为它可以从下面的代码中推断出来:
package parsa.lop.sibeh;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
public class MainActivity extends AppCompatActivity {
private FirebaseAuth mAuth;
private Button mLogin;
private EditText mEmail;
private EditText mPassword;
private GoogleApiClient mGoogleApiClient;
private FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuth = FirebaseAuth.getInstance();
mLogin = findViewById(R.id.login);
mEmail = findViewById(R.id.email);
mPassword = findViewById(R.id.password);
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser() != null){
startActivity(new Intent(MainActivity.this, StartActivity.class));
}
}
};
}
@Override
protected void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}
public void loginButton(View view){
String email = mEmail.getText().toString();
String pass = mPassword.getText().toString();
mAuth.signInWithEmailAndPassword(email, pass).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Toast.makeText(MainActivity.this, "Signed In", Toast.LENGTH_LONG).show();
}
}
});
}
}
我的应用build.gradle
包含
implementation 'com.google.firebase:firebase-core:16.0.6'
implementation 'com.google.firebase:firebase-auth:16.1.0'
我的项目build.gradle
包含
classpath 'com.google.gms:google-services:4.2.0'
我在 firebase 中创建了一个帐户,并google-services.json
在我的 app 文件夹中下载。所以我没有收到任何错误,除了当我通过loginButton()
功能单击按钮时,我从模拟器中获得了更新谷歌播放服务的信息
解决方案
Firebase、Google Maps 等所有 google 服务都可以与 google play 服务一起使用,如果您没有更新它们,任何这些服务都将在您的设备中运行,您需要更新它们并确保它们是最新的。
为避免用户卡在该窗口,您可以添加检查以验证 google play 服务版本是否是最新的,如果不是,您可以重定向您的用户进行更新
final String appPackageName = "con.google.android.gms"; // package name of the app
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
if(status == ConnectionResult.SUCCESS) {
//alarm to go and install Google Play Services
}else if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){
Toast.makeText(context,"please udpate your google play service",Toast.LENGTH_SHORT).show
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
}
在您的 else 语句中,我们正在重定向用户以将其安装在此位置
https://play.google.com/store/apps/details?id=com.google.android.gms
要从您的模拟器更新您的 Google Play 服务,请参阅此答案 在模拟器中更新 Google Play 服务
推荐阅读
- java - 特殊字符上的 Java 字符相等
- c# - 在 Winform 应用程序中输入文本框后,组合框菜单重复错误
- java - Android下获取DNS TCP TLS时间
- python - 我如何保持在同一条线上?
- reactjs - ReactJS子组件在父状态改变后不更新
- java - Java for 循环,同时将变量保持在一个范围内
- java - SLF4J:使用 log4j 时无法加载类“org.slf4j.impl.StaticLoggerBinder”错误
- r - 如何使用 R 在绘图上打印外文
- python - 当变量上升时,下次循环运行时不会使用新的变量号
- python-3.x - 函数调用中的争论没有价值