1

我想在我的应用中使用 Firebase 远程配置。我在 Android Studio 中创建新项目,并按照文档建议运行工具 - Firebase 助手。在创建应用程序console.firebase.google.com并将下一个设置添加到我的根目录build.graldeclasspath 'com.google.gms:google-services:3.0.0'和应用程序build.gralde

apply plugin: 'com.google.gms.google-services'
…
compile 'com.google.firebase:firebase-config:10.2.0'

比我添加到我的 MainActivity:

mFirebaseRemoteConfig.activateFetched();
mFirebaseRemoteConfig.fetch();

fetch()当我运行应用程序时,它会因登录命令而崩溃:

E/AndroidRuntime: FATAL EXCEPTION: GoogleApiHandler
java.lang.NoSuchMethodError: No static method zzz(Ljava/lang/Object;)Ljava/lang/Object; 
    in class Lcom/google/android/gms/common/internal/zzaa; 
    or its super classes (declaration of 'com.google.android.gms.common.internal.zzaa' 
    appears in /data/app/my.packagename-1/base.apk)
at com.google.android.gms.measurement.internal.zzx.zzbd(Unknown Source)

我尝试禁用 Instant run 和 gradle clear,但仍然存在此问题。如何解决?

UPD:我发现如果我apply plugin: 'com.google.gms.google-services'在应用程序中将行从第二行移到最后一行,build.gralde这可以解决问题,但为什么呢?

4

1 回答 1

1

我真的不知道。因此,您没有包含完整的代码。我是这样看的:起初你创建一个这样的实例

mFirebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

然后为开发设置配置

FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
            .setDeveloperModeEnabled(BuildConfig.DEBUG)
            .build();
    mFirebaseRemoteConfig.setConfigSettings(configSettings);

然后你设置默认值 mFirebaseRemoteConfig.setDefaults(R.xml.remote_config_defaults);

XML 文件必须位于 res/XML

您进行获取并在您 activateFetched() 的侦听器内部

mFirebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(MainActivity.this, "Fetch Succeeded",
                                Toast.LENGTH_SHORT).show();

                        // After config data is successfully fetched, it must be activated before newly fetched
                        // values are returned.
                        mFirebaseRemoteConfig.activateFetched();
                    } else {
                        Toast.makeText(MainActivity.this, "Fetch Failed",
                                Toast.LENGTH_SHORT).show();
                    }
                    displayWelcomeMessage();
                }
            });

您在 displayWelcomeMessage() 中获取值,该值必须在侦听器中,否则它将获取值然后完成获取(您将被异步搞砸)

我希望我回答正确

顺便说一句,所有示例代码都在这里https://github.com/firebase/quickstart-android/blob/master/config/app/src/main/java/com/google/samples/quickstart/config/MainActivity.java

于 2017-03-21T20:18:50.443 回答