Skip to content

Commit eb45b5d

Browse files
authored
Merge branch 'master' into master
2 parents f0d4dcc + 54740d7 commit eb45b5d

File tree

17 files changed

+357
-1
lines changed

17 files changed

+357
-1
lines changed

.github/workflows/publish.yml

+2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ jobs:
4242
run: ./gradlew :firebase-firestore:publish
4343
- name: Publish Firebase Functions
4444
run: ./gradlew :firebase-functions:publish
45+
- name: Publish Firebase Messaging
46+
run: ./gradlew :firebase-messaging:publish
4547
- name: Publish Firebase Storage
4648
run: ./gradlew :firebase-storage:publish
4749
- name: Publish Firebase Installations

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ The following libraries are available for the various Firebase products.
2020
| [Realtime Database](https://firebase.google.com/docs/database) | [`dev.gitlive:firebase-database:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-database/1.12.0/pom) | [![70%](https://img.shields.io/badge/-70%25-orange?style=flat-square)](/firebase-database/src/commonMain/kotlin/dev/gitlive/firebase/database/database.kt) |
2121
| [Cloud Firestore](https://firebase.google.com/docs/firestore) | [`dev.gitlive:firebase-firestore:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-firestore/1.12.0/pom) | [![60%](https://img.shields.io/badge/-60%25-orange?style=flat-square)](/firebase-firestore/src/commonMain/kotlin/dev/gitlive/firebase/firestore/firestore.kt) |
2222
| [Cloud Functions](https://firebase.google.com/docs/functions) | [`dev.gitlive:firebase-functions:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-functions/1.12.0/pom) | [![80%](https://img.shields.io/badge/-80%25-green?style=flat-square)](/firebase-functions/src/commonMain/kotlin/dev/gitlive/firebase/functions/functions.kt) |
23-
| [Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [`dev.gitlive:firebase-messaging:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-messaging/1.12.0/pom) | ![0%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square) |
23+
| [Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) | [`dev.gitlive:firebase-messaging:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-messaging/1.12.0/pom) | [![1%](https://img.shields.io/badge/-0%25-lightgrey?style=flat-square)](/firebase-messaging/src/commonMain/kotlin/dev/gitlive/firebase/messaging/messaging.kt) |
2424
| [Cloud Storage](https://firebase.google.com/docs/storage) | [`dev.gitlive:firebase-storage:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-storage/1.12.0/pom) | [![40%](https://img.shields.io/badge/-40%25-orange?style=flat-square)](/firebase-storage/src/commonMain/kotlin/dev/gitlive/firebase/storage/storage.kt) |
2525
| [Installations](https://firebase.google.com/docs/projects/manage-installations) | [`dev.gitlive:firebase-installations:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-installations/1.12.0/pom) | [![90%](https://img.shields.io/badge/-90%25-green?style=flat-square)](/firebase-installations/src/commonMain/kotlin/dev/gitlive/firebase/installations/installations.kt) |
2626
| [Remote Config](https://firebase.google.com/docs/remote-config) | [`dev.gitlive:firebase-config:1.12.0`](https://search.maven.org/artifact/dev.gitlive/firebase-config/1.12.0/pom) | [![20%](https://img.shields.io/badge/-20%25-orange?style=flat-square)](/firebase-config/src/commonMain/kotlin/dev/gitlive/firebase/remoteconfig/FirebaseRemoteConfig.kt) |

build.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ tasks {
4343
"firebase-database:updateVersion", "firebase-database:updateDependencyVersion",
4444
"firebase-firestore:updateVersion", "firebase-firestore:updateDependencyVersion",
4545
"firebase-functions:updateVersion", "firebase-functions:updateDependencyVersion",
46+
"firebase-messaging:updateVersion", "firebase-messaging:updateDependencyVersion",
4647
"firebase-installations:updateVersion", "firebase-installations:updateDependencyVersion",
4748
"firebase-perf:updateVersion", "firebase-perf:updateDependencyVersion",
4849
"firebase-storage:updateVersion", "firebase-storage:updateDependencyVersion"

firebase-messaging/build.gradle.kts

+174
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree
2+
3+
/*
4+
* Copyright (c) 2020 GitLive Ltd. Use of this source code is governed by the Apache 2.0 license.
5+
*/
6+
7+
version = project.property("firebase-messaging.version") as String
8+
9+
plugins {
10+
id("com.android.library")
11+
kotlin("multiplatform")
12+
kotlin("native.cocoapods")
13+
}
14+
15+
android {
16+
val minSdkVersion: Int by project
17+
val compileSdkVersion: Int by project
18+
19+
compileSdk = compileSdkVersion
20+
namespace = "dev.gitlive.firebase.messaging"
21+
22+
defaultConfig {
23+
minSdk = minSdkVersion
24+
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
25+
}
26+
27+
compileOptions {
28+
sourceCompatibility = JavaVersion.VERSION_11
29+
targetCompatibility = JavaVersion.VERSION_11
30+
}
31+
32+
testOptions {
33+
unitTests.apply {
34+
isIncludeAndroidResources = true
35+
}
36+
}
37+
packaging {
38+
resources.pickFirsts.add("META-INF/kotlinx-serialization-core.kotlin_module")
39+
resources.pickFirsts.add("META-INF/AL2.0")
40+
resources.pickFirsts.add("META-INF/LGPL2.1")
41+
}
42+
lint {
43+
abortOnError = false
44+
}
45+
}
46+
47+
val supportIosTarget = project.property("skipIosTarget") != "true"
48+
49+
kotlin {
50+
51+
targets.configureEach {
52+
compilations.configureEach {
53+
kotlinOptions.freeCompilerArgs += "-Xexpect-actual-classes"
54+
}
55+
}
56+
57+
@Suppress("OPT_IN_USAGE")
58+
androidTarget {
59+
instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test)
60+
unitTestVariant.sourceSetTree.set(KotlinSourceSetTree.test)
61+
publishAllLibraryVariants()
62+
compilations.configureEach {
63+
kotlinOptions {
64+
jvmTarget = "11"
65+
}
66+
}
67+
}
68+
69+
if (supportIosTarget) {
70+
iosArm64()
71+
iosX64()
72+
iosSimulatorArm64()
73+
cocoapods {
74+
ios.deploymentTarget = "12.0"
75+
framework {
76+
baseName = "FirebaseMessaging"
77+
}
78+
noPodspec()
79+
pod("FirebaseMessaging") {
80+
version = "10.25.0"
81+
}
82+
}
83+
}
84+
85+
js(IR) {
86+
useCommonJs()
87+
nodejs {
88+
testTask(
89+
Action {
90+
useKarma {
91+
useChromeHeadless()
92+
}
93+
}
94+
)
95+
}
96+
browser {
97+
testTask(
98+
Action {
99+
useKarma {
100+
useChromeHeadless()
101+
}
102+
}
103+
)
104+
}
105+
}
106+
107+
jvm {
108+
compilations.getByName("main") {
109+
kotlinOptions {
110+
jvmTarget = "17"
111+
}
112+
}
113+
compilations.getByName("test") {
114+
kotlinOptions {
115+
jvmTarget = "17"
116+
}
117+
}
118+
}
119+
120+
sourceSets {
121+
all {
122+
languageSettings.apply {
123+
val apiVersion: String by project
124+
val languageVersion: String by project
125+
this.apiVersion = apiVersion
126+
this.languageVersion = languageVersion
127+
progressiveMode = true
128+
optIn("kotlinx.coroutines.ExperimentalCoroutinesApi")
129+
if (name.lowercase().contains("ios")) {
130+
optIn("kotlinx.cinterop.ExperimentalForeignApi")
131+
optIn("kotlinx.cinterop.BetaInteropApi")
132+
}
133+
}
134+
}
135+
136+
getByName("commonMain") {
137+
dependencies {
138+
api(project(":firebase-app"))
139+
implementation(project(":firebase-common"))
140+
}
141+
}
142+
143+
getByName("commonTest") {
144+
dependencies {
145+
implementation(project(":test-utils"))
146+
}
147+
}
148+
149+
getByName("androidMain") {
150+
dependencies {
151+
api("com.google.firebase:firebase-messaging")
152+
}
153+
}
154+
}
155+
}
156+
157+
if (project.property("firebase-messaging.skipIosTests") == "true") {
158+
tasks.forEach {
159+
if (it.name.contains("ios", true) && it.name.contains("test", true)) { it.enabled = false }
160+
}
161+
}
162+
163+
if (project.property("firebase-messaging.skipJsTests") == "true") {
164+
tasks.forEach {
165+
if (it.name.contains("js", true) && it.name.contains("test", true)) { it.enabled = false }
166+
}
167+
}
168+
169+
signing {
170+
val signingKey: String? by project
171+
val signingPassword: String? by project
172+
useInMemoryPgpKeys(signingKey, signingPassword)
173+
sign(publishing.publications)
174+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
Pod::Spec.new do |spec|
2+
spec.name = 'firebase_messaging'
3+
spec.version = '1.8.1'
4+
spec.homepage = ''
5+
spec.source = { :http=> ''}
6+
spec.authors = ''
7+
spec.license = ''
8+
spec.summary = ''
9+
spec.vendored_frameworks = 'build/cocoapods/framework/firebase_messaging.framework'
10+
spec.libraries = 'c++'
11+
12+
13+
14+
spec.pod_target_xcconfig = {
15+
'KOTLIN_PROJECT_PATH' => ':firebase-messaging',
16+
'PRODUCT_MODULE_NAME' => 'firebase_messaging',
17+
}
18+
19+
spec.script_phases = [
20+
{
21+
:name => 'Build firebase_messaging',
22+
:execution_position => :before_compile,
23+
:shell_path => '/bin/sh',
24+
:script => <<-SCRIPT
25+
if [ "YES" = "$OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED" ]; then
26+
echo "Skipping Gradle build task invocation due to OVERRIDE_KOTLIN_BUILD_IDE_SUPPORTED environment variable set to \"YES\""
27+
exit 0
28+
fi
29+
set -ev
30+
REPO_ROOT="$PODS_TARGET_SRCROOT"
31+
"$REPO_ROOT/../gradlew" -p "$REPO_ROOT" $KOTLIN_PROJECT_PATH:syncFramework \
32+
-Pkotlin.native.cocoapods.platform=$PLATFORM_NAME \
33+
-Pkotlin.native.cocoapods.archs="$ARCHS" \
34+
-Pkotlin.native.cocoapods.configuration="$CONFIGURATION"
35+
SCRIPT
36+
}
37+
]
38+
39+
end

firebase-messaging/package.json

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"name": "@gitlive/firebase-messaging",
3+
"version": "1.12.0",
4+
"description": "Wrapper around firebase for usage in Kotlin Multiplatform projects",
5+
"main": "firebase-messaging.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/GitLiveApp/firebase-kotlin-sdk.git"
12+
},
13+
"keywords": [
14+
"kotlin",
15+
"multiplatform",
16+
"kotlin-js",
17+
"firebase"
18+
],
19+
"author": "dev.gitlive",
20+
"license": "Apache-2.0",
21+
"bugs": {
22+
"url": "https://github.com/GitLiveApp/firebase-kotlin-sdk/issues"
23+
},
24+
"homepage": "https://github.com/GitLiveApp/firebase-kotlin-sdk",
25+
"dependencies": {
26+
"@gitlive/firebase-app": "1.12.0",
27+
"firebase": "9.19.1",
28+
"kotlin": "1.8.20",
29+
"kotlinx-coroutines-core": "1.6.4"
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.gitlive.firebase.messaging
2+
3+
import androidx.test.platform.app.InstrumentationRegistry
4+
import dev.gitlive.firebase.Firebase
5+
import dev.gitlive.firebase.FirebaseOptions
6+
import dev.gitlive.firebase.apps
7+
import dev.gitlive.firebase.initialize
8+
import kotlin.test.BeforeTest
9+
10+
class AndroidInstrumentedFirebaseMessagingTest : FirebaseMessagingTest() {
11+
12+
private val context = InstrumentationRegistry.getInstrumentation().context
13+
14+
@BeforeTest
15+
fun initializeFirebase() {
16+
Firebase.apps(context).firstOrNull() ?: Firebase.initialize(
17+
context,
18+
FirebaseOptions(
19+
applicationId = "1:846484016111:ios:dd1f6688bad7af768c841a",
20+
apiKey = "AIzaSyCK87dcMFhzCz_kJVs2cT2AVlqOTLuyWV0",
21+
databaseUrl = "https://fir-kotlin-sdk.firebaseio.com",
22+
storageBucket = "fir-kotlin-sdk.appspot.com",
23+
projectId = "fir-kotlin-sdk",
24+
gcmSenderId = "846484016111"
25+
)
26+
)
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
@file:JvmName("android")
2+
package dev.gitlive.firebase.messaging
3+
4+
import dev.gitlive.firebase.Firebase
5+
6+
actual val Firebase.messaging: FirebaseMessaging
7+
get() = FirebaseMessaging(com.google.firebase.messaging.FirebaseMessaging.getInstance())
8+
9+
actual class FirebaseMessaging(val android: com.google.firebase.messaging.FirebaseMessaging) {
10+
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package dev.gitlive.firebase.messaging
2+
3+
import dev.gitlive.firebase.Firebase
4+
import dev.gitlive.firebase.FirebaseApp
5+
6+
/** Returns the [FirebaseMessaging] instance of the default [FirebaseApp]. */
7+
expect val Firebase.messaging: FirebaseMessaging
8+
9+
expect class FirebaseMessaging
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.gitlive.firebase.messaging
2+
3+
import dev.gitlive.firebase.Firebase
4+
import kotlin.test.Test
5+
import kotlin.test.assertNotNull
6+
7+
abstract class FirebaseMessagingTest {
8+
9+
@Test
10+
fun initialization() {
11+
assertNotNull(Firebase.messaging)
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package dev.gitlive.firebase.messaging
2+
3+
import cocoapods.FirebaseMessaging.FIRMessaging
4+
import dev.gitlive.firebase.Firebase
5+
6+
actual val Firebase.messaging: FirebaseMessaging
7+
get() = FirebaseMessaging(FIRMessaging.messaging())
8+
9+
actual class FirebaseMessaging(val ios: FIRMessaging) {
10+
11+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package dev.gitlive.firebase.messaging
2+
3+
class IOSFirebaseMessagingTest : FirebaseMessagingTest()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package dev.gitlive.firebase.messaging.externals
2+
3+
import dev.gitlive.firebase.externals.FirebaseApp
4+
5+
external fun getMessaging(
6+
app: FirebaseApp? = definedExternally,
7+
): Messaging
8+
9+
external interface Messaging
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.gitlive.firebase.messaging
2+
3+
import dev.gitlive.firebase.Firebase
4+
import dev.gitlive.firebase.messaging.externals.Messaging
5+
import dev.gitlive.firebase.messaging.externals.getMessaging
6+
7+
actual val Firebase.messaging: FirebaseMessaging
8+
get() = FirebaseMessaging(getMessaging())
9+
10+
actual class FirebaseMessaging(val js: Messaging) {
11+
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
@file:JvmName("android")
2+
package dev.gitlive.firebase.messaging
3+
4+
import dev.gitlive.firebase.Firebase
5+
6+
actual val Firebase.messaging: FirebaseMessaging
7+
get() = TODO("Not yet implemented")
8+
9+
actual class FirebaseMessaging

0 commit comments

Comments
 (0)