diff --git a/plugins/2023.3693/android/corona.gradle b/plugins/2023.3693/android/corona.gradle new file mode 100644 index 0000000..a15c9aa --- /dev/null +++ b/plugins/2023.3693/android/corona.gradle @@ -0,0 +1,5 @@ +android.defaultConfig { + minSdkVersion Math.max(minSdkVersion?.apiLevel ?: 15, 16) +} +ext["minSdkVersion"] = Math.max(ext.find("minSdkVersion")?:15, 16) +implementation 'com.google.firebase:firebase-messaging:23.2.1' diff --git a/plugins/2023.3693/android/plugin-notifications-v2.aar b/plugins/2023.3693/android/plugin-notifications-v2.aar new file mode 100644 index 0000000..a59d451 Binary files /dev/null and b/plugins/2023.3693/android/plugin-notifications-v2.aar differ diff --git a/plugins/2023.3693/iphone-sim/libNotificationsV2Plugin.a b/plugins/2023.3693/iphone-sim/libNotificationsV2Plugin.a new file mode 100644 index 0000000..955eedc Binary files /dev/null and b/plugins/2023.3693/iphone-sim/libNotificationsV2Plugin.a differ diff --git a/plugins/2023.3693/iphone-sim/metadata.lua b/plugins/2023.3693/iphone-sim/metadata.lua new file mode 100644 index 0000000..0d8628f --- /dev/null +++ b/plugins/2023.3693/iphone-sim/metadata.lua @@ -0,0 +1,13 @@ +local metadata = +{ + plugin = + { + format = "staticLibrary", + staticLibs = { 'NotificationsV2Plugin', }, + frameworks = { }, + frameworksOptional = { "UserNotifications", "UserNotificationsUI" }, + delegates = { "CoronaNotificationsDelegate" } + } +} + +return metadata diff --git a/plugins/2023.3693/iphone/libNotificationsV2Plugin.a b/plugins/2023.3693/iphone/libNotificationsV2Plugin.a new file mode 100644 index 0000000..ce90a9c Binary files /dev/null and b/plugins/2023.3693/iphone/libNotificationsV2Plugin.a differ diff --git a/plugins/2023.3693/iphone/metadata.lua b/plugins/2023.3693/iphone/metadata.lua new file mode 100644 index 0000000..0d8628f --- /dev/null +++ b/plugins/2023.3693/iphone/metadata.lua @@ -0,0 +1,13 @@ +local metadata = +{ + plugin = + { + format = "staticLibrary", + staticLibs = { 'NotificationsV2Plugin', }, + frameworks = { }, + frameworksOptional = { "UserNotifications", "UserNotificationsUI" }, + delegates = { "CoronaNotificationsDelegate" } + } +} + +return metadata diff --git a/plugins/2023.3693/mac-sim/plugin_notifications_v2.lua b/plugins/2023.3693/mac-sim/plugin_notifications_v2.lua new file mode 100644 index 0000000..fc274fc --- /dev/null +++ b/plugins/2023.3693/mac-sim/plugin_notifications_v2.lua @@ -0,0 +1,50 @@ +-- Notifications V2 plugin + +local Library = require "CoronaLibrary" + +-- Create library +local lib = Library:new{ name="plugin.notifications.v2", publisherId="com.coronalabs", version=1 } + +------------------------------------------------------------------------------- +-- BEGIN +------------------------------------------------------------------------------- + +-- This sample implements the following Lua: +-- +-- local notifications = require "plugin.notifications.v2" +-- + +local function showWarning(functionName) + print( functionName .. " WARNING: The Notifications V2 plugin is only supported on iOS and Android devices") +end + +function lib.registerForPushNotifications() + showWarning("notifications.registerForPushNotifications()") +end + +function lib.subscribe() + showWarning("notifications.subscribe()") +end + +function lib.unsubscribe() + showWarning("notifications.unsubscribe()") +end + +function lib.getDeviceToken() + showWarning("notifications.getDeviceToken()") +end + +function lib.scheduleNotification() + showWarning("notifications.scheduleNotification()") +end + +function lib.cancelNotification() + showWarning("notifications.cancelNotification()") +end + +------------------------------------------------------------------------------- +-- END +------------------------------------------------------------------------------- + +-- Return an instance +return lib diff --git a/plugins/2023.3693/win32-sim/plugin_notifications_v2.lua b/plugins/2023.3693/win32-sim/plugin_notifications_v2.lua new file mode 100644 index 0000000..fc274fc --- /dev/null +++ b/plugins/2023.3693/win32-sim/plugin_notifications_v2.lua @@ -0,0 +1,50 @@ +-- Notifications V2 plugin + +local Library = require "CoronaLibrary" + +-- Create library +local lib = Library:new{ name="plugin.notifications.v2", publisherId="com.coronalabs", version=1 } + +------------------------------------------------------------------------------- +-- BEGIN +------------------------------------------------------------------------------- + +-- This sample implements the following Lua: +-- +-- local notifications = require "plugin.notifications.v2" +-- + +local function showWarning(functionName) + print( functionName .. " WARNING: The Notifications V2 plugin is only supported on iOS and Android devices") +end + +function lib.registerForPushNotifications() + showWarning("notifications.registerForPushNotifications()") +end + +function lib.subscribe() + showWarning("notifications.subscribe()") +end + +function lib.unsubscribe() + showWarning("notifications.unsubscribe()") +end + +function lib.getDeviceToken() + showWarning("notifications.getDeviceToken()") +end + +function lib.scheduleNotification() + showWarning("notifications.scheduleNotification()") +end + +function lib.cancelNotification() + showWarning("notifications.cancelNotification()") +end + +------------------------------------------------------------------------------- +-- END +------------------------------------------------------------------------------- + +-- Return an instance +return lib diff --git a/src/android/app/build.gradle.kts b/src/android/app/build.gradle.kts index ebf6370..79480a8 100644 --- a/src/android/app/build.gradle.kts +++ b/src/android/app/build.gradle.kts @@ -39,11 +39,16 @@ val coronaSrcDir = project.findProperty("coronaSrcDir") as? String "$rootDir/../Corona" } val coronaBuiltFromSource = file("CMakeLists.txt").exists() && file("../sdk").exists() + val windows = System.getProperty("os.name").toLowerCase().contains("windows") -val shortOsName = if (windows) "win" else "mac" +val linux = System.getProperty("os.name").toLowerCase().contains("linux") +val shortOsName = if (windows) "win" else if (linux) "linux" else "mac" + val nativeDir = if (windows) { val resourceDir = coronaResourcesDir?.let { file("$it/../Native/").absolutePath }?.takeIf { file(it).exists() } (resourceDir ?: "${System.getenv("CORONA_PATH")}/Native").replace("\\", "/") +} else if (linux) { + "$coronaResourcesDir/Native" } else { val resourceDir = coronaResourcesDir?.let { file("$it/../../../Native/").absolutePath }?.takeIf { file(it).exists() } resourceDir ?: "${System.getenv("HOME")}/Library/Application Support/Corona/Native/" @@ -61,7 +66,7 @@ fun checkCoronaNativeInstallation() { } else { val setupNativeApp = File("/Applications").listFiles { f -> f.isDirectory && f.name.startsWith("Corona") - }?.max()?.let { + }.maxOrNull()?.let { "${it.absolutePath}/Native/Setup Corona Native.app" } ?: "Native/Setup Corona Native.app" throw InvalidUserDataException("Corona Native was not set-up properly. Launch '$setupNativeApp'.") @@ -124,16 +129,17 @@ val parsedBuildProperties: JsonObject = run { return@run JsonObject(mapOf("buildSettings" to parsedBuildSettingsFile, "packageName" to coronaAppPackage, "targetedAppStore" to coronaTargetStore)) } -val coronaMinSdkVersion = parsedBuildProperties.lookup("buildSettings.android.minSdkVersion").firstOrNull()?.toString()?.toIntOrNull() - ?: 16 +extra["minSdkVersion"] = parsedBuildProperties.lookup("buildSettings.android.minSdkVersion").firstOrNull()?.toString()?.toIntOrNull() + ?: 19 val coronaBuilder = if (windows) { "$nativeDir/Corona/win/bin/CoronaBuilder.exe" +} else if (linux) { + "$coronaResourcesDir/../Solar2DBuilder" } else { "$nativeDir/Corona/$shortOsName/bin/CoronaBuilder.app/Contents/MacOS/CoronaBuilder" } - val coronaVersionName = parsedBuildProperties.lookup("buildSettings.android.versionName").firstOrNull()?.toString() ?: project.findProperty("coronaVersionName") as? String ?: "1.0" @@ -144,6 +150,8 @@ val coronaVersionCode: Int = val androidDestPluginPlatform = if (coronaTargetStore.equals("amazon", ignoreCase = true)) { "android-kindle" +} else if (coronaTargetStore.equals("samsung", ignoreCase = true)) { + "android-nongoogle" } else { "android" } @@ -182,21 +190,22 @@ if (configureCoronaPlugins == "YES") { // android { - compileOptions { - sourceCompatibility = org.gradle.api.JavaVersion.VERSION_1_8 - targetCompatibility = org.gradle.api.JavaVersion.VERSION_1_8 + lintOptions { + isCheckReleaseBuilds = true } - - compileSdkVersion(29) + compileSdk = 33 defaultConfig { applicationId = coronaAppPackage - targetSdkVersion(29) - minSdkVersion(coronaMinSdkVersion) + targetSdk = 33 + minSdk = (extra["minSdkVersion"] as Int) versionCode = coronaVersionCode versionName = coronaVersionName multiDexEnabled = true } - + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } coronaKeystore?.let { keystore -> signingConfigs { create("release") { @@ -247,6 +256,16 @@ android { aaptOptions { additionalParameters("--extra-packages", extraPackages.filter { it.isNotBlank() }.joinToString(":")) } + if (isExpansionFileRequired) { + assetPacks.add(":preloadedAssets") + } + + parsedBuildProperties.lookup>("buildSettings.android.onDemandResources").firstOrNull()?.forEach { + it["tag"].let { tag -> + assetPacks.add(":pda-$tag") + } + } + // This is dirty hack because Android Assets refuse to copy assets which start with . or _ if (!isExpansionFileRequired) { android.applicationVariants.all { @@ -266,6 +285,35 @@ android { } // +val apkFilesSet = mutableSetOf() +file("$buildDir/intermediates/corona_manifest_gen/CopyToApk.txt").takeIf { it.exists() }?.readLines()?.forEach { + apkFilesSet.add(it.trim()) +} +if (!isSimulatorBuild) { + parsedBuildProperties.lookup>("buildSettings.android.apkFiles").firstOrNull()?.forEach { + apkFilesSet.add(it.trim()) + } +} +if (apkFilesSet.isNotEmpty()) { + val generatedApkFiles = "$buildDir/generated/apkFiles" + val coronaCopyApkFiles = tasks.create("coronaCopyApkFiles") { + description = "Creates new resource directory with raw APK files" + into(generatedApkFiles) + from(coronaSrcDir) { + apkFilesSet.forEach { include(it) } + } + doFirst { + delete(generatedApkFiles) + } + } + + android.applicationVariants.all { + preBuildProvider.configure { + dependsOn(coronaCopyApkFiles) + } + android.sourceSets[name].resources.srcDirs(generatedApkFiles) + } +} fun processPluginGradleScripts() { fileTree(coronaPlugins) { @@ -319,6 +367,12 @@ fun coronaAssetsCopySpec(spec: CopySpec) { file("$coronaTmpDir/excludesfile.properties").takeIf { it.exists() }?.readLines()?.forEach { exclude(it) } + parsedBuildProperties.lookup>("buildSettings.android.onDemandResources").firstOrNull()?.forEach { + it["resource"].let { res -> + exclude("$res") + exclude("$res/**") + } + } if (!isSimulatorBuild) { // use build.settings properties only if this is not simulator build parsedBuildProperties.lookup>("buildSettings.excludeFiles.all").firstOrNull()?.forEach { @@ -463,7 +517,7 @@ android.applicationVariants.all { } doFirst { if (!file(coronaSrcDir).isDirectory) { - throw InvalidUserDataException("Unable to find Corona project to build!") + throw InvalidUserDataException("Unable to find Solar2D project (for example platform/test/assets2/main.lua)!") } } } @@ -752,6 +806,8 @@ tasks.register("exportCoronaAppTemplate") { exclude("app/build/**", "app/CMakeLists.txt") exclude("**/*.iml", "**/\\.*") include("setup.sh", "setup.bat") + include("preloadedAssets/build.gradle.kts") + include("PAD.kts.template") into("template") } from(android.sdkDirectory) { @@ -811,7 +867,7 @@ tasks.register("exportToNativeAppTemplate") { val coronaNativeOutputDir = project.findProperty("coronaNativeOutputDir") as? String ?: "$nativeDir/Corona" -tasks.register("installAppTemplateToNative") { +tasks.register("installAppTemplateToSim") { if (coronaBuiltFromSource) group = "Corona-dev" enabled = coronaBuiltFromSource dependsOn("exportCoronaAppTemplate") @@ -821,10 +877,10 @@ tasks.register("installAppTemplateToNative") { into("$coronaNativeOutputDir/android/resource") } -tasks.register("installAppTemplateAndAARToNative") { +tasks.register("installAppTemplateAndAARToSim") { if (coronaBuiltFromSource) group = "Corona-dev" enabled = coronaBuiltFromSource - dependsOn("installAppTemplateToNative") + dependsOn("installAppTemplateToSim") dependsOn(":Corona:assembleRelease") from("${findProject(":Corona")?.buildDir}/outputs/aar/") { include("Corona-release.aar") @@ -836,15 +892,24 @@ tasks.register("installAppTemplateAndAARToNative") { fun copyWithAppFilename(dest: String, appName: String?) { delete("$dest/$coronaAppFileName.apk") delete("$dest/$coronaAppFileName.aab") + var hasODR = false + parsedBuildProperties.lookup>("buildSettings.android.onDemandResources").firstOrNull()?.forEach { + it["resource"].let { res -> + hasODR = true + } + } + copy { into(dest) val copyTask = this android.applicationVariants.matching { it.name.equals("release", true) }.all { - copyTask.from(packageApplicationProvider!!.get().outputDirectory) { - include("*.apk") - exclude("*unsigned*") + if(!isExpansionFileRequired && !hasODR) { + copyTask.from(packageApplicationProvider!!.get().outputDirectory) { + include("*.apk") + exclude("*unsigned*") + } } copyTask.from("$buildDir/outputs/bundle/$name") { include("*.aab") @@ -877,10 +942,6 @@ tasks.create("buildCoronaApp") { } } delete("$it/$coronaExpansionFileName") - copy { - from("$buildDir/outputs/$coronaExpansionFileName") - into(it) - } } } } @@ -1060,7 +1121,6 @@ tasks.register("createExpansionFile") { // dependencies { - if (coronaBuiltFromSource) { implementation(project(":Corona")) implementation(files("$rootDir/../../plugins/build/licensing-google/android/bin/classes.jar")) diff --git a/src/android/build.gradle.kts b/src/android/build.gradle.kts index 94b2902..a0fdfe7 100644 --- a/src/android/build.gradle.kts +++ b/src/android/build.gradle.kts @@ -4,10 +4,10 @@ buildscript { jcenter() } dependencies { - classpath(kotlin("gradle-plugin", version = "1.3.70")) - classpath("com.android.tools.build:gradle:3.5.4") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21") + classpath("com.android.tools.build:gradle:7.4.2") classpath("com.beust:klaxon:5.0.1") - classpath("com.google.gms:google-services:4.3.10") + classpath("com.google.gms:google-services:4.3.14") } } diff --git a/src/android/gradle.properties b/src/android/gradle.properties index 4366c84..ecb4007 100644 --- a/src/android/gradle.properties +++ b/src/android/gradle.properties @@ -1,5 +1,11 @@ coronaTargetStore=google +# Uncomment to enable Google Play Asset Delivery +# coronaExpansionFileName=dummy.obb + # Migrate To Android X android.useAndroidX=true android.enableJetifier=true + +# Build Plugin 4.2 Support +android.enableResourceOptimizations=false diff --git a/src/android/gradle/wrapper/gradle-wrapper.jar b/src/android/gradle/wrapper/gradle-wrapper.jar index f6b961f..62d4c05 100644 Binary files a/src/android/gradle/wrapper/gradle-wrapper.jar and b/src/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/src/android/gradle/wrapper/gradle-wrapper.properties b/src/android/gradle/wrapper/gradle-wrapper.properties index 0068f95..0be118e 100644 --- a/src/android/gradle/wrapper/gradle-wrapper.properties +++ b/src/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jul 24 23:06:14 EEST 2020 +#Mon Jul 24 23:10:14 CDT 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip diff --git a/src/android/gradlew b/src/android/gradlew index cccdd3d..fbd7c51 100755 --- a/src/android/gradlew +++ b/src/android/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/src/android/gradlew.bat b/src/android/gradlew.bat index e95643d..a9f778a 100644 --- a/src/android/gradlew.bat +++ b/src/android/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,8 +29,11 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -65,6 +84,7 @@ set CMD_LINE_ARGS=%* set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% diff --git a/src/android/plugin/build.gradle b/src/android/plugin/build.gradle index 2a0606f..1c77637 100644 --- a/src/android/plugin/build.gradle +++ b/src/android/plugin/build.gradle @@ -1,22 +1,22 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 29 + compileSdkVersion 33 compileOptions { sourceCompatibility 1.8 targetCompatibility 1.8 } defaultConfig { - minSdkVersion 15 - targetSdkVersion 29 + minSdkVersion 19 + targetSdkVersion 33 versionCode 1 versionName "1.0" } } dependencies { - implementation 'com.google.firebase:firebase-messaging:22.0.0' + implementation 'com.google.firebase:firebase-messaging:23.2.1' implementation ':Corona@aar' } diff --git a/src/android/plugin/src/main/AndroidManifest.xml b/src/android/plugin/src/main/AndroidManifest.xml index 6557742..102f871 100644 --- a/src/android/plugin/src/main/AndroidManifest.xml +++ b/src/android/plugin/src/main/AndroidManifest.xml @@ -1,7 +1,11 @@ + + +