我创建了一个应用程序,我可以在其中进行两次访问:FirebaseUI Auth和Firebase SDK身份验证(我知道这非常错误,我只为某些测试做了这个)。好吧,从我添加谷歌访问权限开始,我无法通过SDK身份验证访问,应用程序总是崩溃,我不知道为什么。 这是我的代码:
public class MainActivity extends AppCompatActivity
{
DialogProgress dialogProgress;
EditText editEmail;
EditText editPassword;
String email;
String password;
FirebaseAuth firebaseAuth;
final int REQUEST_CODE_GOOGLE = 100;
static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
editEmail = (EditText) findViewById(R.id.editEmailA);
editPassword = (EditText) findViewById(R.id.editPasswordA);
firebaseAuth = FirebaseAuth.getInstance();
if(firebaseAuth.getCurrentUser()!=null)
{
Toast.makeText(getApplicationContext(), "Bentornato " + firebaseAuth.getCurrentUser().getEmail().toString(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,ProfileActivity.class);
startActivity(intent);
finish();
}
findViewById(R.id.accediButton).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
email = editEmail.getText().toString();
password = editPassword.getText().toString();
if(TextUtils.isEmpty(email))
{
Toast.makeText(getApplicationContext(),"Email vuota",Toast.LENGTH_SHORT).show();
}
if(TextUtils.isEmpty(password))
{
Toast.makeText(getApplicationContext(),"Password vuota",Toast.LENGTH_SHORT).show();
}
if(!(TextUtils.isEmpty(email)||TextUtils.isEmpty(password)))
{
DialogProgress.setLayout(0);
dialogProgress = new DialogProgress();
dialogProgress.setCancelable(false);
dialogProgress.show(getSupportFragmentManager().beginTransaction(),"Dialog");
firebaseAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task)
{
if (task.isSuccessful())
{
dialogProgress.dismiss();
Toast.makeText(getApplicationContext(), "Bentornato " + firebaseAuth.getCurrentUser().getEmail().toString(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,ProfileActivity.class);
startActivity(intent);
finish();
}
else
{
dialogProgress.dismiss();
Toast.makeText(getApplicationContext(), "Login fallito " + task.getException().toString(), Toast.LENGTH_LONG).show();
}
}
});
}
}
});
findViewById(R.id.registratiText).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this,RegistrazioneActivity.class);
startActivity(intent);
}
});
findViewById(R.id.accediGoogle).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
AuthUI authUi = AuthUI.getInstance();
Intent intent = authUi.createSignInIntentBuilder().build();
startActivityForResult(intent,REQUEST_CODE_GOOGLE);
}
});
}
@Override
public void onActivityResult(int codice, int risultato, Intent data)
{
super.onActivityResult(codice, risultato, data);
if(codice==REQUEST_CODE_GOOGLE && risultato==RESULT_OK && data!=null)
{
IdpResponse idpResponse = IdpResponse.fromResultIntent(data);
Toast.makeText(getApplicationContext(),idpResponse + "",Toast.LENGTH_LONG).show();
}
}
}
这是我的gradle项目:
buildscript
{
repositories
{
jcenter()
}
dependencies
{
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.google.gms:google-services:3.0.0'
}
}
allprojects
{
repositories
{
jcenter()
maven { url 'https://maven.fabric.io/public' }
}
}
task clean(type: Delete)
{
delete rootProject.buildDir
}
这是我的gradle应用程序:
apply plugin: 'com.android.application'
android
{
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig
{
applicationId "com.example.utente.myfirebase"
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes
{
release
{
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-
rules.pro'
}
}
}
dependencies
{
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',
{
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.google.firebase:firebase-auth:9.4.0'
compile 'com.google.firebase:firebase-database:9.4.0'
compile 'com.google.firebase:firebase-storage:9.4.0'
compile 'com.firebaseui:firebase-ui-auth:1.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
日志:
04-15 21:34:06.318 26912-26912/com.example.utente.myfirebase A/FirebaseApp: Firebase API initialization failure.
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.google.firebase.FirebaseApp.zza(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1737)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1712)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at android.app.ActivityThread.installProvider(ActivityThread.java:5437)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5032)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4972)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5910)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Caused by: java.lang.NoSuchMethodError: No static method zzy(Ljava/lang/Object;)Ljava/lang/Object; in class Lcom/google/android/gms/common/internal/zzab; or its super classes (declaration of 'com.google.android.gms.common.internal.zzab' appears in /data/app/com.example.utente.myfirebase-2/split_lib_dependencies_apk.apk:classes33.dex)
at com.google.android.gms.measurement.internal.zzx.zzdo(Unknown Source)
at com.google.android.gms.measurement.AppMeasurement.getInstance(Unknown Source)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.google.firebase.FirebaseApp.zza(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.google.firebase.FirebaseApp.initializeApp(Unknown Source)
at com.google.firebase.provider.FirebaseInitProvider.onCreate(Unknown Source)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1737)
at android.content.ContentProvider.attachInfo(ContentProvider.java:1712)
at com.google.firebase.provider.FirebaseInitProvider.attachInfo(Unknown Source)
at android.app.ActivityThread.installProvider(ActivityThread.java:5437)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:5032)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4972)
at android.app.ActivityThread.access$1600(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1491)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5910)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
答案 0 :(得分:6)
您必须使用兼容版本的Firebase API库和Firebase用户界面。兼容版本表位于Firebase UI documentation。将com.google.firebase:firebase-*
库的9.4.0更改为10.2.0。
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.google.firebase:firebase-auth:10.2.0'
compile 'com.google.firebase:firebase-database:10.2.0'
compile 'com.google.firebase:firebase-storage:10.2.0'
compile 'com.firebaseui:firebase-ui-auth:1.2.0'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
答案 1 :(得分:6)
改变这个:
compile 'com.google.firebase:firebase-auth:9.4.0'
compile 'com.google.firebase:firebase-database:9.4.0'
compile 'com.google.firebase:firebase-storage:9.4.0'
对此:
compile 'com.google.firebase:firebase-auth:10.2.0'
compile 'com.google.firebase:firebase-database:10.2.0'
compile 'com.google.firebase:firebase-storage:10.2.0'
您需要升级Firebase,您使用的是旧版本。您会看到Firebase的10.2.1版本可用,但根据FirebaseUi
,它目前支持最高10.2.0的Firebase版本,因此请使用10.2.0。
答案 2 :(得分:0)
运行项目。
答案 3 :(得分:0)
检查Firebase的可比性版本,建议使用最新版本
就我而言,我忘记添加以下依赖项
compile 'com.google.firebase:firebase-core:9.4.0'
我的所有依赖项如下
compile 'com.google.firebase:firebase-core:9.4.0'
compile 'com.google.firebase:firebase-messaging:9.4.0'
compile 'com.firebase:firebase-client-android:2.5.1'
全部用于向设备发送推送通知