在没有 Google Play 服务的情况下使用 Google Firebase 远程配置?

Posted

技术标签:

【中文标题】在没有 Google Play 服务的情况下使用 Google Firebase 远程配置?【英文标题】:Using Google Firebase Remote Config without Google Play Services? 【发布时间】:2020-06-29 15:33:54 【问题描述】:

是否可以在设备上未安装 Google Play 服务 (aosp) 的情况下使用 Firebase 远程配置?

我确实在我的 android 项目中遵循了这个设置:(通过 https://firebase.google.com/docs/android/setup):

    将类路径“com.google.gms:google-services:4.3.3”添加到主 gradle 文件中 添加了实现“com.google.firebase:firebase-config:19.1.3”和“apply plugin:'com.google。 gms.google-services'' 到应用 gradle 文件中

它确实可以编译,但是当我最初启动应用程序时 fetchAndActivate 没有成功,因为调用 fetch() 后任务结果:

MISSING_INSTANCEID_SERVICE(无法获取 Firebase 实例 ID 令牌以进行提取)

  firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();
        FirebaseRemoteConfigSettings.Builder configBuilder = new FirebaseRemoteConfigSettings.Builder();
        configBuilder.setMinimumFetchIntervalInSeconds(3600);


        firebaseRemoteConfig.setConfigSettingsAsync(configBuilder.build());
        HashMap<String, Object> defaults = new HashMap<>();
        defaults.put("variant", "basic");
        startActivity(new Intent(getApplicationContext(), CarLauncherBasic.class));

        firebaseRemoteConfig.setDefaultsAsync(defaults);
        firebaseRemoteConfig.fetchAndActivate()
                .addOnCompleteListener(this, new OnCompleteListener<Boolean>() 
                    @Override
                    public void onComplete(@NonNull Task<Boolean> task) 
                        if (task.isSuccessful()) 
                            boolean updated = task.getResult();
                            Toast.makeText(MainActivity.this, "Fetch and activate succeeded",
                                    Toast.LENGTH_SHORT).show();

                         else 
                            Toast.makeText(MainActivity.this, "Fetch failed",
                                    Toast.LENGTH_SHORT).show();
                        
                        String variant = firebaseRemoteConfig.getString("variant");

//
                    
                );

    

【问题讨论】:

【参考方案1】:

firebaser 在这里

Firebase 远程配置不再依赖于 Google Play 服务,可用于任何 Android 安装。

有关在不使用 Play 服务的情况下哪些 Firebase 服务可以工作的最新列表,请参阅 Firebase 文档中的 Dependencies of Firebase Android SDKs on Google Play services。

上一个已过时的答案:

不幸的是,目前远程配置依赖于在设备上安装 Google Play 服务。

虽然这种依赖是间接的,并且是传递的,这就是为什么我(实际上:我们,作为多人陷入同一个兔子洞)最初忽略了它。

好消息是,许多 Firebase 服务正在迁移到一种称为 Firebase 安装服务的新服务,该服务不再依赖于 Google Play 服务。但是没有时间表说明 Remote Config 何时不再具有这种依赖关系。

以前的答案是错误的?:

我四处询问,似乎远程配置确实依赖于设备上的 Google Play 服务。所以你应该可以在 AOSP 设备上使用它。

但是,远程配置的许多用例依赖于基于 Analytics 事件和属性来定位用户。由于 Analytics 不是 Firebase 开源 SDK 的一部分,因此您将无法使用 Analytics 属性定位 AOSP 上的用户。 Remote Config 的其他定位功能适用于所有人,但您只能根据 Analytics 事件/属性定位用户,前提是他们在具有 Google Play 服务的设备上。

【讨论】:

但我怀疑它无法使用需要分析输入的高级定位功能。 @Doug:我实际上四处询问,似乎分析也不需要播放服务。但是 Auth 可以(主要用于 Google Sign-in iirc),因此基于人员的定位可能会受到限制,但派生属性应该仍然有效。 那为什么它不是开源的呢?我的印象是非开源的 Firebase SDK 对 Play 有很强的依赖,这意味着它们不能被所有人编译。 github.com/firebase/firebase-android-sdk 它实际上在 in open source repo,只是在一个奇怪的位置(只是 config):github.com/firebase/firebase-android-sdk/tree/master/… 嘿@MihaeKheel。接得好。正如答案和 cmets 中所说,对 Play Services 的依赖已被删除,并且已经完成。我更新了我的答案以反映并添加了指向您提到的新文档页面的链接。【参考方案2】:

最新版本的 Firebase 远程配置 [19.2.0] 似乎可以在没有 Google PlayServices 的设备上运行。我将它与 Firebase 分析 [17.4.4] 一起使用。我仍然可以在 logcat 中看到这些 PlayServices 警告,但该功能似乎正在运行。

以下网址中的 remote-config [19.2.0] 发行说明声明->“已迁移以直接使用 Firebase 安装服务,而不是通过 Firebase 实例 ID 使用间接依赖项。” 所以,这可能起到了作用。https://firebase.google.com/support/release-notes/android#remote-config_v19-2-0

【讨论】:

【参考方案3】:

这似乎是在较新版本的远程配置中引入的。在没有 Google Play 服务的设备上为我工作的最后一个版本是 19.1.0。最好确保 Firebase 人员了解这一点,以便在未来的版本中对其进行修复。

我从 Firebase 支持收到以下信息: 您分享的 Stack Overflow 帖子中提到的 Firebase 安装服务不足以消除对 Play 服务的依赖,因此目前没有解决此问题的计划。

【讨论】:

以上是关于在没有 Google Play 服务的情况下使用 Google Firebase 远程配置?的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 游戏服务获取成就列表

如何在没有选择器意图的情况下直接打开 Google Play 商店应用程序 [重复]

Google Play 服务示例未离线获取位置

在没有“应用签名”的情况下为 Google Play 商店中的应用设置新的上传密钥

如何在不使用 Android Studio 的情况下为 Google Play 开发控制台创建即时应用程序?

如果没有更新 Google Play 服务,如何处理 Google API 客户端