如何解决无法在firebase AuthUi中找到显式活动?

时间:2017-08-03 06:50:33

标签: android firebase firebase-authentication android-manifest

使用firebase UI时,我无法找到显式活动类com.firebase.ui.auth.KickoffActivity

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FirebaseApp.initializeApp(this);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);
    mAuth=FirebaseAuth.getInstance();
    mAuthListner=new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user=firebaseAuth.getCurrentUser();
            if(user!=null){
                Toast.makeText(getApplicationContext(),"Sign in success",Toast.LENGTH_SHORT).show();

            }
            else {
                startActivityForResult(AuthUI.getInstance()
                        .createSignInIntentBuilder()
                        .setIsSmartLockEnabled(false)
                        .setProviders(AuthUI.EMAIL_PROVIDER,AuthUI.GOOGLE_PROVIDER).build(),
                        RC_SIGN_IN);
            }
        }
    };
}

完整的错误消息

android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.flamanco.trackme/com.firebase.ui.auth.KickoffActivity}; have you declared this activity in your AndroidManifest.xml? at android.app.Instrumentation.checkStartActivityResult

在app / .gradle文件中添加了依赖项

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.google.firebase:firebase-core:10.0.1'
    compile 'com.google.firebase:firebase-auth:10.0.1'
    compile 'com.firebaseui:firebase-ui-auth:1.1.1'
}

apply plugin: 'com.google.gms.google-services'

还在build gradle中添加了插件

classpath 'com.google.gms:google-services:3.0.0'

最后我在我的firebase控制台项目中添加了SHA1指纹。

我是否需要在清单文件中添加auth.kickOff活动

4 个答案:

答案 0 :(得分:6)

  

android.content.ActivityNotFoundException:无法找到显式   活动课   {com.example.flamanco.trackme / com.firebase.ui.auth.KickoffActivity};   你有没有在AndroidManifest.xml中声明这个活动?在   android.app.Instrumentation.checkStartActivityResult

您需要在 AndroidManifest.xml

中声明活动

打开您的清单文件并添加KicoffActivity。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="auto">
<activity
            android:name="KickoffActivity"/>
</manifest>

另外,我不确定你在这里有两次初始的FirebaseApp ..

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FirebaseApp.initializeApp(this);
    setContentView(R.layout.activity_main);
    FirebaseApp.initializeApp(this);
}

通常它应该只在应用程序类中初始化一次, 在onCreate()方法中。

创建一个新的应用程序类..

public class YourApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FirebaseApp.initializeApp(this);
    }
}

并在清单中添加相同内容,

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="auto">
<application
        android:name="YourApplicationClass"
        android:allowBackup="false"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/MyMaterialTheme.Base">
       <activity
        android:name="KickoffActivity"/>
</application>
</manifest>

答案 1 :(得分:1)

手动将KickoffActivity活动添加到清单中并不是正确的解决方案。它应该为你完成。 如果您手动添加KickoffActivity,则必须添加另一个活动和另一个活动,依此类推。 我碰巧有:

COUNT()

在我的清单中。这可以防止任何明显的合并。 删除它,它工作正常。

之后,您可能会遇到其他一些合并错误,例如重复标记等。 但错误将会有所不同,并会告诉您现在该做什么。我有一个标签在我和合并清单中使用了两次,所以我被告知要添加:

tools:node="replace">

这也解决了这个问题。

答案 2 :(得分:0)

确保您已在 AndroidManifest.xml 中正确声明 KickoffActivity

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.xxx.xxx">
<application
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity android:name=".KickoffActivity">
        </activity>
    </application>

</manifest>

特别是检查name属性,如果你在包中有活动说“test”那么 你必须改变 name属性为

<activity android:name=".test.KickoffActivity">
            </activity>

如果 AndroidManifest.xml 一切正常, 我建议按照 deividas 提及更新你的库。

您可以在此处查看FirebaseUI发行说明https://github.com/firebase/FirebaseUI-Android/releases

还要将其他firebase库更新为

 compile 'com.google.firebase:firebase-core:11.0.4' 
 compile 'com.google.firebase:firebase-auth:11.0.4'

答案 3 :(得分:0)

最后我完全重新安装android studio到最新版本,更新了所有内容,包括

  • Google Play服务
  • firebase libraries
  • gradle version
  • google repositoris

我从开始开始新项目并且没有错误地工作。 在添加AUTHUI依赖项时会自动添加许多活动。 这些活动包括kickoffactivity,recoverpasswordactivity,registerEmailActivity等 我可以通过前往路径来验证是否

/project/module/build/intermediates/manifests/full/debug/And‌​roidManifest.xml.

以前我没有这个清单文件中的kickoffactivity,我不知道原因,但现在我有了它。我不认为在app的清单文件上手动添加它会起作用。