在一个 APK 文件中的不同 Firebase 项目(运行时)之间切换

2024-03-09

我们正在将 Firebase 消息传递集成到 Android 应用程序中以用于推送通知。我们将使用服务器端的 SNS 向 Firebase 发送推送消息。以下是我们的用例:

  • 我们有三台服务器:QA、STG 和 PRODUCTION
  • 我们在 firebase 控制台中创建了三个项目:appQA、appSTG 和 appProd
  • 但我们只想生成 1 个 APK,它可以根据用户登录的服务器从上述三个 Fire Base 项目中的任何一个接收 Firebase 推送通知。
  • 我们在 firebase 中配置了每个项目,最后每个项目有 1 个 google-services.json 文件(总共 3 个)
  • 现在我们如何配置或生成 1 个 APK,它可以包含所有三个 json 文件并在它们之间切换runtime并不是构建时因为我们不想为不同的环境构建单独的 APK。我们严格要求生成一个可用于连接到我们所有环境并接收来自所有环境的推送通知的单个 APK。
  • 我们尝试过口味和构建类型,但两者都构建时并不是run-time

这是我们第一次涉足 Android 上的推送通知世界。

PS:最明显的解决方案是在 firebase 中只有一个项目并在客户端上配置它,我们所有的服务器都可以使用同一个项目,但理想情况下我们希望生产与 QA/STG 分别使用单独的项目


If you really如果需要一个能够以某种方式自行选择它所针对的 Firebase 项目的 APK,则无法使用 Gradle 插件提供的自动 init。

通常情况下,Firebase 应用程序自动初始化 https://firebase.googleblog.com/2016/08/organizing-your-firebase-enabled-android-app-builds.html(一定要阅读我的博客文章)通过 gradle 插件注入的数据。该系统适用于绝大多数情况,但不适用于您的情况。

如果正常情况不适合您,您必须通过 Android 构建工具禁用 FirebaseInitProvider(请参阅工具:节点=“删除” https://developer.android.com/studio/build/manifest-merge.html),然后自己初始化您的应用程序FirebaseApp.initializeApp() https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseApp使用您构建的 FirebaseOptions。您需要安排在调用任何 API 之前进行 init,否则会出现错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在一个 APK 文件中的不同 Firebase 项目(运行时)之间切换 的相关文章

  • Firebase 托管部署失败

    Running firebase deploy在给我一个超时错误之前会运行几分钟Error ESOCKETTIMEDOUT 我之前已经成功部署了多次 除了项目的前端 用 React 编写 之外 没有更改任何内容 我有一个单独的文件夹 其中包
  • AngularFire 访问子元素方法

    我正在寻找一种方法来获取子元素的方法 而不是单独加载该元素 假设我有一个帖子模型 每个帖子都有评论 这就是我获取帖子模型的方式 var post firebase new Firebase FIREBASE URL posts post n
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • Android 深度链接至 Instagram 应用

    Instagram 已经发布了 iOS 深层链接的 url 方案 但尚未为 Android 创建文档 有没有办法深入链接到 Android 上的 Instagram 应用程序 以转到 Instagram 应用程序中的特定位置 例如 Inst
  • 对于一个单元格,RecyclerView onBindViewHolder 调用次数过多

    我正在将 RecyclerView 与 GridLayoutManager 一起使用 对于网格中的每个项目 我需要调用 REST api 来检索数据 然后 从远程异步获取数据后 我使用 UIL 加载 显示图像 一切似乎都很好 但我发现 on
  • okhttp 获取失败响应

    我已经在我的 android 客户端中实现了 okhttp 来进行网络调用 当我收到失败响应时 我会收到失败代码以及与该代码相关的文本作为消息 但我没有收到服务器发送给我的自定义失败响应 在我实施的代码中的失败响应中 我收到的消息只是 错误
  • OnLongClickListener 不工作

    我有一个ImageView 我需要使用onLongClickListener对于图像视图 当我使用这段代码时 什么也没有发生 Code gallery Gallery findViewById R id gall1 gallery setA
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 卡片视图 单击卡片移至新活动

    我是 Android 编程新手 正在研究卡片布局 我想知道如何使其可点击 android clickable true android foreground android attr selectableItemBackground 我的卡
  • 在命令行上卸载 Android SDK 的选定部分

    这与 卸载旧的 Android SDK 版本 https stackoverflow com questions 15182377 uninstall old android sdk versions 除非我想在无头 Linux CI 服务
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • Firebase Firestore:获取文档的生成 ID (Python)

    我可以创建一个新文档 带有自动生成的 ID 并存储对其的引用 如下所示 my data key value doc ref db collection u campaigns add my data 我可以像这样访问数据本身 print d
  • Android 后台倒计时器

    我有一个 Android 应用程序 它管理一个倒计时器 类 CountDownTimer 它显示在应用程序屏幕中 以显示到达 00 00 还剩多少时间 我现在的问题是 当我按主页按钮或启动另一个应用程序时 应用程序 计时器不会在后台运行 所
  • 有没有任何代码可以在android中设置壁纸而无需裁剪和缩放?

    我正在创建一个画廊应用程序 我的第一个应用程序 这是我的代码 Bitmap bmd BitmapFactory decodeStream is try getApplicationContext setWallpaper bmd catch

随机推荐

  • 实现 AVAssetDownloadURLSession 下载 HLS 流时出错

    我正在尝试为流应用程序实现离线模式 目标是能够在用户的设备上下载 HLS 流 以便即使用户离线时也可以观看流 我最近偶然发现本教程 https developer apple com library content documentatio
  • Angular2-捕获错误并将其显示在视图中

    我有一个执行 get 请求并抛出错误的服务 服务 ts return this http get apiUrl map response Response gt const items response json return items
  • PNG、GIF、JPEG、SVG 有哪些不同的用例? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在构建网站或界面等时何时应使用某些图像文件类型 他们的优点和缺点是什么 我知道PNG和GIF是无损的 而JPEG是有损的 但 PNG
  • 如何制作我的程序的流程图

    我有一个用java编写的非常大的服务器程序 它是由另一位不再在公司工作的开发人员编写的 非常复杂 它由23个包组成 我使用的是eclipse 我想要的是一个程序 它将获取我的程序的源文件并为函数创建一种流程图字符 从具有 main 的类开始
  • 特定计算机上的 C# 控制台应用程序出现奇怪问题

    我有最简单的 C 控制台应用程序 仅执行 WriteLine 和 ReadLine 由于某种原因 它不能在其构建的机器上以独立模式运行 我在另一个盒子上尝试了构建的可执行文件 它工作正常 尝试在这台机器上运行它会导致它挂在那里 它在 VS
  • 如何计算请求到响应的生命周期?

    我目前正在向请求对象添加一个 cookie 并从响应中的当前时间中减去它 但我假设有更好的方法来做到这一点 此外 在实际用例中 重复使用相同的 Cookie 密钥可能行不通 有任何想法吗 RequestFilters Add request
  • 复杂的 SQL 查询 - 折叠日期范围

    我们有一个表格列出了 服务时间 的开始和结束日期 我想要一个可以搜索所有行并根据日期间隔识别服务中断的查询 Data Start End 1 1 2000 2 1 2001 2 2 2001 4 1 2001 4 1 2004 6 2 20
  • SqlDbType 枚举映射 - C#

    其中有什么价值SqlDbType我应该使用枚举numericT SQL 数据类型 Decimal 请参阅此页面 http msdn microsoft com en us library system data sqltypes aspx
  • “暂停”具有属性的线程

    我有一个 TThread 对象 希望能够通过程序主窗体上的按钮启动 停止线程 我一直在研究实现这一点的方法 到目前为止我有以下想法 当用户单击 停止 时终止并释放线程 并在单击 开始 时创建一个新线程 使用 sleep 来延迟线程 我不想这
  • 输入 UITextField 时 iPhone 键盘不出现

    这一定是某种我看不到的新手错误 如果我能得到关于检查什么或去哪里的提示 我将不胜感激 我遵循了一个具有 UITextField 的 iPhone 教程 确保我连接了文本字段的 IBOutlet 并且它似乎可以正确编译 没有错误或警告 但是当
  • 使用 PhoneGap 进行闪烁导航的 Jquery Mobile 代码

    我相信这篇文章可以解决我的问题在页面之间导航时闪烁 https stackoverflow com questions 5953753 flickering when navigating between pages 具体来说 docume
  • 子类型的关系数据建模

    我正在学习关系模型和数据建模 我对子类型有些困惑 我知道数据建模是一个迭代过程 有许多不同的建模方法 但我不知道如何在不同的选项之间进行选择 Example 假设我们想要建模粒子 分子 原子 质子 中子 电子 为了简单起见 我们忽略夸克和其
  • 如何通过 gradle externaNativeTool 将特定参数(例如:opencv_dir)传递给 CMake?

    我正在尝试在 Android studio 中作为 externalNativeBuildTool 执行 CMake 脚本 它具有 OpenCV 依赖项 我知道我可以在脚本中静态定义 OpenCV 并且我不想在 android studio
  • 是否可以在 C++ 中为变量使用动态名称

    如果可能的话 我想使用动态名称 这是一个关于我的意思的例子 int sol1 sol2 for int i 1 i lt 3 i sol i i i return max sol1 sol2 With sol i I mean sol1在第
  • XCTests 无法间歇性地在模拟器中启动应用程序

    有没有人经历过并解决过 XCTests 间歇性无法在模拟器中启动应用程序进行 UI 测试 XCUI 我正在快速通道中运行 不同的测试似乎每次测试运行都失败 操作系统 10 12 3 iOS模拟器 10 0 Xcode 8 2 1 快车道2
  • wget 破坏了内容配置

    我正在尝试从以下网站下载通过 Content Disposition attachment 发送的 kml 文件 http waterwatch usgs gov index php m real w kml r us regions ia
  • 我应该在 PHP 代码中使用 @ 吗?

    如果我使用 在我的代码中 它会影响性能吗 这篇文章有助于回答您的问题 http anvilstudios co za blog php how to ignore errors in a custom php error handler h
  • 在 Perl 中将变量链接到类属性

    这个问题源于另一个问题 Perl中彻底销毁一个对象的所有痕迹 https stackoverflow com questions 31841484 completely destroy all traces of an object in
  • 在构建jenkins项目时,10分钟后发生超时错误

    我正在使用 jenkins 构建我的 git 远程项目 问题是日志显示 10 分钟后超时 开始接收对象 并在 56 时发生了一些事情 编辑您的作业配置 然后在 git 插件部分下 点击 添加 单击 高级克隆行为 在 克隆和获取操作的超时 以
  • 在一个 APK 文件中的不同 Firebase 项目(运行时)之间切换

    我们正在将 Firebase 消息传递集成到 Android 应用程序中以用于推送通知 我们将使用服务器端的 SNS 向 Firebase 发送推送消息 以下是我们的用例 我们有三台服务器 QA STG 和 PRODUCTION 我们在 f