如何使用Dagger2提供GoogleSignInOptions?

问题描述 投票:1回答:2

我正在尝试使用Dagger2制作小型Firebase登录应用,但GoogleSignInOptions出现问题。我想在AppModule中进行设置,但是.requestIdToken出现以下错误:(getString(R.string.default_web_client_id))我使用GoogleSignInOptions的方法合适吗?也许这是错误的方式?对此感到抱歉,但是我对Firebase的注入感到困惑。

@Module
class AppModule {

@Provides
fun getApp(application: Application?): Boolean {
    return application == null
}

@Singleton
@Provides
fun provideFirebaseAuthInstance(): FirebaseAuth {
    return FirebaseAuth.getInstance()
}

@Singleton
@Provides
fun provideGoogleSignInClient() : GoogleSignInOptions {

   return GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(getString(R.string.default_web_client_id)) //here is a problem
        .requestEmail()
        .build()
}

}
android firebase kotlin dagger-2
2个回答
1
投票

将应用程序对象作为参数传递,并使用它来获取所需的字符串

@Singleton
@Provides
fun provideGoogleSignInClient(application: Application) : GoogleSignInOptions {

   return GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestIdToken(application.applicationContext.getString(R.string.default_web_client_id))
        .requestEmail()
        .build()
    }

1
投票

您需要获取上下文才能使用getString()方法。

解决此问题的一种方法是使应用程序上下文在那里可用。

您将修改Application子类以添加应用程序上下文引用:

class App : Application(),
        HasSupportFragmentInjector,
        HasActivityInjector {

    @Inject
    lateinit var activityInjector: DispatchingAndroidInjector<Activity>

    @Inject
    lateinit var supportfragmentInjector: DispatchingAndroidInjector<Fragment>

    override fun onCreate() {
        super.onCreate()
        appContext = this
        DaggerApplicationComponent
                .create()
                .inject(this)
    }

    override fun activityInjector(): AndroidInjector<Activity> = activityInjector

    override fun supportFragmentInjector(): AndroidInjector<Fragment> = supportfragmentInjector
}

lateinit var appContext: Context
    internal set

然后您可以在依赖项注入模块中使用该appContext引用:

@Singleton
@Provides
fun provideGoogleSignInClient() : GoogleSignInOptions {

    return GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(appContext.getString(R.string.default_web_client_id))
            .requestEmail()
            .build()
}

另一种选择是使用依赖注入来提供应用程序上下文,有关更多信息,请参见此处:https://github.com/google/dagger/issues/832

© www.soinside.com 2019 - 2024. All rights reserved.