gpt4 book ai didi

android - 在库中实现 Firebase

转载 作者:IT老高 更新时间:2023-10-28 22:26:19 26 4
gpt4 key购买 nike

我想在我想在许多应用中用作 SDK 的库中实现 Firebase 通知系统。

Firebase 现在要求提供应用 ID,但我在库中实现它,因此没有应用 ID。

如何实现向使用我的库的应用发送通知的目标?

提前致谢。

最佳答案

这些都是有点 hacky 或太多的工作,这是一个很好的简单例子(虽然讽刺,因为这是一篇很长的帖子——但值得)。

可以在您的库项目中使用 FireBase 代码,当然消费应用程序需要注册应用程序并获取应用程序 ID/google-services.json 文件。

但是您的库没有,也不应该关心这一点,这是消费应用程序的工作,而不是您的库。

这是一个在库项目中使用 firebase-messaging 模块的简短示例。

YourLibrary 模块的 build.gradle:

// Other typical library set up 
apply plugin: 'com.android.library'

android {
compileSdkVersion 27

defaultConfig {
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName '1.0'

// Don’t for get your library’s proguard file!
consumerProguardFiles 'proguard-rules.pro'
}
}

ext {
currentFirebaseVersion = "11.8.0"
}

dependencies {
/*
Here we depend on the firebase messaging dependency (via compileOnly),
allowing us to use the FireBase API within our library module.

I exclude that org.json module because it may cause build warnings, this
step isn’t totally necessary.

NOTE: You should use `compileOnly` here so the dependency is
not added to the build output You will be allowed to use the
dependency in your library. If the consuming app wants to use firebase
they’ll need to depend on it (using `implementation`).
*/
compileOnly("com.google.firebase:firebase-messaging:$currentFirebaseVersion") {
exclude group: 'org.json', module: 'json'
}
}

// Other typical library set up. But nothing else relating Firebase.

这就是您在图书馆项目中需要做的所有事情。 不要在此处应用 gms 插件,并且不要将 google-services 类路径添加到库 build.gradle

下面是您设置消费应用的方法:

MyClientApp 的顶级 build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
google() // You know the drill...
}
// Any other set up you might have...

dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
/*
Here in your client app’s top-level build.gradle you add the
google-services to the app’s classpath.
*/
classpath 'com.google.gms:google-services:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
// Other basic stuff...
allprojects {
apply plugin: 'maven'
apply plugin: 'maven-publish'

repositories {
jcenter()
google()
}
}

现在我们需要设置消费应用程序模块build.gradle,很简单。我们几乎只需要应用插件,并依赖我们创建的包含所有 FireBase 代码的库模块。

MyClientApp 的模块级 build.gradle:

buildscript {
repositories {
google()
mavenLocal()
}
}
apply plugin: 'com.android.application'

android {
compileSdkVersion 27
defaultConfig {
applicationId "com.your.application.that.can.use.firebase"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName '1.0'
}
//other typical set up
}

ext {
currentFirebaseVersion = "11.8.0"
}

dependencies {
implementation('com.your.library:YourLibrary:1.0@aar') {
transitive = true
// Use the consuming application's FireBase module, so exclude it
// from the dependency. (not totally necessary if you use compileOnly
// when declaring the dependency in the library project).
exclude group: 'com.google.firebase'
// Exclude the "plain java" json module to fix build warnings.
exclude group: 'org.json', module: 'json'
}

implementation("com.google.firebase:firebase-messaging:$currentFirebaseVersion") {
// Exclude the "plain java" json module to fix build warnings.
exclude group: 'org.json', module: 'json'
}
}

// Needs to be at the bottom of file.
apply plugin: 'com.google.gms.google-services'

注意事项:

  • 必须在底部应用 google-services 插件(仅在客户端模块 build.gradle 中)。
  • 依赖于其中包含 FireBase 代码的库模块,但排除它的 FireBase 模块版本,以支持您自己的依赖项版本。
  • 应用依赖于它自己的 FireBase 版本。
  • classpath 'com.google.gms:google-services:3.1.1' 只进入客户端应用的顶级 build.gradle
  • 当然,您需要注册客户端应用并将 google-services.json 放入客户端应用的项目中。
  • 在您的应用 list 中定义必要的 Firebase Service(或使用 list 合并并将它们从您的库项目中合并)
  • google_play_services_version 元数据标记添加到客户端应用的 list 中。
  • 在声明 FireBase 依赖项时,库可以/应该使用 compileOnly

现在您将能够在您的应用中使用您在使用 FireBase 的库中定义的 FireBase 代码。或者您可以让您的库模块完成所有 FireBase 工作!

当然,这通常用于内部库,因为像 Firebase 这样的框架并非设计为在库模块中实现,但有时您需要,所以这是一个简单的非 hacky/理智的解决问题。它可以用于通过 maven 分发的项目——我的库使用它,它从未引起任何问题。

更新:

在声明库模块的 Firebase 依赖项时,您应该使用 compileOnly。通过这样做,依赖项将不会添加到构建输出中。但是您将被允许在您的库中使用依赖项。如果消费应用想要使用 firebase,他们需要手动依赖它(使用 implementation)。这将有助于减少应用程序中不需要的依赖项/膨胀,以及声明这样的依赖项的“正确”方式。 注意:在您的模块中使用它的代码之前,您可能需要执行运行时检查以确保该库可用。

关于android - 在库中实现 Firebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com