Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(android): support targetSdkVersion >= 31 (Android 12) #185

Merged
merged 6 commits into from
Aug 20, 2022

Conversation

bluetech
Copy link

@bluetech bluetech commented Apr 28, 2022

When using the plugin on Android 12 and/or targetSdkVersion >= 31, any push notification causes the app the crash. The following commits fix these issues.

Description

Please see the commits - I split the PR to multiple commits and describe each change in the commit message.

Related Issue

Resolves #184

Motivation and Context

Fix compatibility with Android 12 / targetSdkVersion >= 31.

How Has This Been Tested?

I tested push notifications (regular & data) on an Android 11 and an Android 12 device.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

This is needed for compatibility with targetSdkVersion>=31. Without it,
push messages cause a crash on Android 12 due to missing
FLAG_MUTABLE/FLAG_IMMUTABLE on PendingIntent[0], notification trampoline
issue, and possibly other such reasons.

Note that Firebase has removed the FirbaseInstanceId class in favor of
FirbaseInstallations. To restore it for now, add the firebase-iid
dependency, see [2].

[0] https://developer.android.com/about/versions/12/behavior-changes-12#pending-intent-mutability
[1] https://developer.android.com/about/versions/12/behavior-changes-12#notification-trampolines
[2] https://firebase.google.com/support/release-notes/android#messaging_v22-0-0
Since 1ae3428, when
`PushInstanceIDListenerService` was changed away from the deprecated
`FirebaseInstanceIdService` to use
`FirebaseMessagingService::onNewToken`, there is no longer a need to use
a separate service anymore. Further, the `INSTANCE_ID_EVENT` intent
filter is not needed.
The callback gets the new token already, there is no need to fetch it
again.
These have been deprecated in recent firebase-messaging releases.
@wreiske
Copy link

wreiske commented Apr 29, 2022

Thanks for opening this PR. I had just updated my project and have an Android 12 device.... I spent about 30 minutes trying to figure out why the app crashed the moment a push was received.

When I try to build using this PR this breaks:

> Task :app:compileDebugKotlin FAILED
e: C:\prj\project-name\.meteor\local\cordova-build\platforms\android\app\src\main\java\com\adobe\phonegap\push\FCMService.kt: (49, 21): Unresolved reference: FLAG_MUTABLE

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileDebugKotlin'.

Tasks.await throws ExecutionException so it needs to be unwrapped for
the existing error handling to work, otherwise an IOException causes the
app to crash.
@kryops
Copy link

kryops commented Jun 20, 2022

I am in the process of updating my app to targetSdkVersion 31. This PR builds fine (using cordova-android@10.1.2), and push notifications start to work again on my Android 12 device 🚀

simon-strudwick pushed a commit to Personal-Group/cordova-plugin-push that referenced this pull request Jul 27, 2022
ngmares added a commit to ngmares/cordova-plugin-push that referenced this pull request Aug 19, 2022
@erisu erisu changed the title Fixes for Android 12 / targetSdkVersion >= 31 feat: support Android 12 (targetSdkVersion >= 31) Aug 20, 2022
@erisu erisu changed the title feat: support Android 12 (targetSdkVersion >= 31) feat(android): support targetSdkVersion >= 31 (Android 12) Aug 20, 2022
@erisu erisu merged commit c3fb5b8 into havesource:master Aug 20, 2022
@marioshtika
Copy link

Hello and thank you for this fix.

Do you know if and when will this be released in npm?

Thank you in advance.

@Mister-CK
Copy link

Mister-CK commented Oct 21, 2022

this PR breaks my build :

Task :app:compileDebugKotlin FAILED
e: app/src/main/java/com/adobe/phonegap/push/PushPlugin.kt: (466, 57): Unresolved reference: token
e: app/src/main/java/com/adobe/phonegap/push/PushPlugin.kt: (619, 57): Unresolved reference: deleteToken

I'll look into fixing this, but if someone already has a solution that would be much appreciated.

@viktor-shmigol
Copy link

@erisu This PR breaks my build as well.
cordova-android: "11.0.0"
Android SDK 32

Selection_009
Selection_010

@Mister-CK
Copy link

@viktor-shmigol
For me the following steps worked:

  • replace ONLY FCMService.kt in your plugin (version 3.0.1) with the one in this PR.
  • use patch package to create a patch of the change with https://www.npmjs.com/package/patch-package
  • build again (reinstalling node-modules, plugins and platforms)

@marioshtika
Copy link

This is merged in the master branch but not released yet in npm so you might need to add it in your package.json file like this

"dependencies": {
    ...
    "@havesource/cordova-plugin-push": "git+https://github.com/havesource/cordova-plugin-push.git",
    ...
}

@Mister-CK
Copy link

Mister-CK commented Oct 25, 2022

This is merged in the master branch but not released yet in npm so you might need to add it in your package.json file like this

"dependencies": {
    ...
    "@havesource/cordova-plugin-push": "git+https://github.com/havesource/cordova-plugin-push.git",
    ...
}

No, I tested that like you suggested, this PR broke the plugin because of the errors specified above.

DONT RELEASE THIS!

@viktor-shmigol
Copy link

viktor-shmigol commented Oct 25, 2022

The workaround is to switch back to FirebaseInstanceId: https://github.com/viktor-shmigol/cordova-plugin-push/commit/2484e4566914dc40eb976afff6bc8e78fba37064

I know this is deprecated. However, it seems working with cordova-android@11 and Android SDK 32.
Just need to add it in your package.json file like this:

"dependencies": {
    ...
    "@havesource/cordova-plugin-push": "git+https://github.com/viktor-shmigol/cordova-plugin-push.git",
    ...
}

@marioshtika
Copy link

marioshtika commented Oct 25, 2022

@Mister-CK, this is working for me.

But I am using:

cordova-android: "10.1.2"
Android SDK 31

I will make those upgrades and check if I am getting the error that you mentioned

@erisu
Copy link

erisu commented Oct 25, 2022

Can you provide a full list of plugins and versions that is installed on the project?

I just tested building against main branch with no issues. My project is basically the default Cordova template with Cordova-Android 11.

I have no additional plugins installed.

$ cordova info

Cordova Packages:

    cli: 11.0.0
        common: 4.0.2
        create: 4.0.0
        lib: 11.0.0
            common: 4.0.2
            fetch: 3.0.1
            serve: 4.0.0

Project Installed Platforms:

    android: 11.0.0

Project Installed Plugins:

    @havesource/cordova-plugin-push: 4.0.0-dev.0

Environment:

    OS: macOS Monterey 12.6 (21G115) (darwin 21.6.0) x64
    Node: v18.10.0
    npm: 8.19.2

android Environment:

    android:
...

Project Setting Files:

    config.xml:
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.foobar.cordovaTest" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>cordovaTest</name>
    <description>Sample Apache Cordova App</description>
    <author email="dev@cordova.apache.org" href="https://cordova.apache.org">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />

    <platform name="android">
        <!-- Google Services Configurations (e.g. Cloud Messaging) -->
        <resource-file src="res/android/google-services.json" target="/app/google-services.json" />

        <preference name="scheme" value="https" />
        <preference name="hostname" value="localhost" />
    </platform>
</widget>

    package.json:
--- Start of Cordova JSON Snippet ---
{
  "platforms": [
    "android"
  ],
  "plugins": {
    "@havesource/cordova-plugin-push": {
      "ANDROIDX_CORE_VERSION": "1.6.+",
      "FCM_VERSION": "23.+"
    }
  }
}
--- End of Cordova JSON Snippet ---

@Mister-CK
Copy link

@marioshtika I am also using cordova 10.1.2 and targetSDK 31

@viktor-shmigol
Copy link

@erisu

Cordova:

   Cordova CLI       : 11.0.0
   Cordova Platforms : android 11.0.0

Cordova Packages:
    cli: 11.0.0
        common: 4.0.2
        create: 4.0.0
        lib: 11.0.0
            common: 4.0.2
            fetch: 3.0.1
            serve: 4.0.0

Project Installed Platforms:

    android: 11.0.0

Project Installed Plugins:
    @havesource/cordova-plugin-push: 4.0.0-dev.0

Environment:

    OS: Ubuntu 22.04.1 LTS (linux 5.15.0-52-generic) x64
    Node: v14.17.0
    npm: 6.14.13

android Environment:

    android:
Available Android targets:==============] 100% Fetch remote repository...       
id: 1 or "android-32"
     Name: Android API 32
     Type: Platform
     API level: 32
     Revision: 1

     package.json:
  --- Start of Cordova JSON Snippet ---
  {
    "plugins": {

     "@havesource/cordova-plugin-push": {
       "ANDROID_SUPPORT_V13_VERSION": "28.0.0",
       "FCM_VERSION": "18.+",
       "IOS_FIREBASE_MESSAGING_VERSION": "~> 6.32.2",
       "ANDROIDX_CORE_VERSION": "1.6.+"
     },
     ...
  }

@Mister-CK
Copy link

@erisu our package.json:
{
"name": "app",
"version": "1.0.0",
"author": {
"name": "",
"email": "",
"url": ""
},
"description": "",
"devDependencies": {
"@cucumber/cucumber": "^7.3.1",
"@globules-io/cordova-plugin-ios-xhr": "^1.2.1",
"@havesource/cordova-plugin-push": "^3.0.1",
"@wdio/appium-service": "^7.12.5",
"@wdio/cli": "^7.12.6",
"@wdio/cucumber-framework": "^7.12.5",
"@wdio/local-runner": "^7.12.5",
"@wdio/mocha-framework": "^7.12.5",
"@wdio/spec-reporter": "^7.12.5",
"@wdio/sync": "^7.12.5",
"appium": "^1.21.0",
"chai": "^4.3.4",
"chromedriver": "^93.0.1",
"cordova-android": "^10.1.2",
"cordova-clean": "^1.4.2",
"cordova-clipboard": "^1.3.0",
"cordova-plugin-android-fingerprint-auth": "^1.5.0",
"cordova-plugin-contentprovider": "file:_files/cordova-plugin-contentprovider",
"cordova-plugin-filepath": "^1.6.0",
"cordova-plugin-firebase-analytics": "^4.5.0",
"cordova-plugin-firebase-dynamiclinks": "^4.8.0",
"cordova-plugin-media": "^5.0.4",
"cordova-plugin-ms-appinsights": "file:_files/cordova-plugin-ms-appinsights",
"cordova-plugin-touch-id": "^3.4.0",
"cordova-support-android-plugin": "^1.0.2",
"del": "^6.0.0",
"elementtree": "^0.1.7",
"glob": "^7.1.7",
"gulp": "^4.0.2",
"gulp-changed": "^4.0.3",
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.0",
"gulp-html-replace": "^1.6.1",
"gulp-if": "^3.0.0",
"gulp-inject": "^5.0.5",
"gulp-jshint": "^2.1.0",
"gulp-load-plugins": "^2.0.7",
"gulp-order": "^1.2.0",
"gulp-preprocess": "^4.0.2",
"gulp-rename": "^2.0.0",
"gulp-replace": "^1.1.3",
"gulp-rev": "^9.0.0",
"gulp-sass": "^5.0.0",
"gulp-strip-css-comments": "^2.0.0",
"gulp-uglify": "^3.0.0",
"gulp-util": "^3.0.7",
"jshint": "^2.13.1",
"jshint-stylish": "^2.1.0",
"karma": "^6.3.17",
"karma-chrome-launcher": "^3.1.0",
"karma-coverage": "^2.2.0",
"karma-jasmine": "^4.0.1",
"karma-jasmine-html-reporter": "^1.7.0",
"multiple-cucumber-html-reporter": "^1.18.0",
"replace-in-file": "^6.2.0",
"shelljs": "^0.8.5",
"cordova-plugin-start-partner-app": "file:_files/cordova-plugin-start-partner-app",
"streamqueue": "^1.1.1",
"uglify-es": "^3.3.9",
"unzipper": "^0.10.11",
"wdio-cucumberjs-json-reporter": "^4.1.2",
"wiredep": "^4.0.0",
"xml-parser": "^1.2.1",
"xml-stringify": "^2.0.0",
"yargs": "^17.3.1"
},
"dependencies": {
"@ionic-native/network-interface": "^4.20.0",
"android-versions": "^1.7.0",
"big-integer": "^1.6.51",
"com.omarben.inappreview": "0.0.6",
"cordova-custom-config": "^5.1.1",
"cordova-ios": "^6.2.0",
"cordova-open-native-settings": "1.5.5",
"cordova-plugin-add-swift-support": "^2.0.2",
"cordova-plugin-androidx-adapter": "^1.1.3",
"cordova-plugin-app-version": "^0.1.12",
"cordova-plugin-appavailability": "^0.4.2",
"cordova-plugin-apprate": "^1.7.2",
"cordova-plugin-appsettings": "~1.0.2",
"cordova-plugin-browsertab": "git+https://github.com/VismaLietuva/cordova-plugin-browsertab.git",
"cordova-plugin-camera": "git+https://github.com/ibcomputing/cordova-plugin-camera.git",
"cordova-plugin-chooser": "^1.3.2",
"cordova-plugin-customurlscheme": "^5.0.2",
"cordova-plugin-device": "~2.0.3",
"cordova-plugin-dialogs": "~2.0.2",
"cordova-plugin-file": "^6.0.2",
"cordova-plugin-file-opener2": "^3.0.5",
"cordova-plugin-file-transfer-ios-fix": "^1.7.2",
"cordova-plugin-firebase": "^2.0.5",
"cordova-plugin-globalization": "^1.11.0",
"cordova-plugin-inappbrowser": "^5.0.0",
"cordova-plugin-native-spinner": "^1.1.3",
"cordova-plugin-networkinterface": "^2.2.0",
"cordova-plugin-onegini": "file:_files/cordova-plugin-onegini",
"cordova-plugin-qrscanner": "^3.0.1",
"cordova-plugin-splashscreen": "^6.0.0",
"cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-x-socialsharing": "^6.0.3",
"cordova-plugin-x-toast": "^2.7.3",
"cordova-sharingreceptor": "file:_files/Cordova/cordova-sharingreceptor",
"cordova-universal-links-plugin": "git+https://github.com/chancezeus/cordova-universal-links-plugin.git",
"cordova.plugins.diagnostic": "^6.1.1",
"es6-promise-plugin": "^4.2.2",
"execa": "^5.1.1",
"human-signals": "^3.0.1",
"lru-cache": "^6.0.0",
"patch-package": "^6.4.7",
"pump": "^3.0.0",
"q": "^1.5.1",
"sass": "^1.49.9",
"signal-exit": "^3.0.7"
},
"cordova": {
"plugins": {
"cordova-plugin-dialogs": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-appsettings": {},
"cordova-plugin-device": {},
"cordova-plugin-x-toast": {},
"cordova-sharingreceptor": {},
"com.omarben.inappreview": {},
"cordova-plugin-screen-orientation": {},
"cordova-plugin-native-spinner": {},
"cordova-plugin-file": {},
"cordova-plugin-apprate": {},
"cordova-plugin-file-opener2": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-customurlscheme": {
"URL_SCHEME": "",
"ANDROID_SCHEME": " ",
"ANDROID_HOST": " ",
"ANDROID_PATHPREFIX": "/"
},
"cordova-plugin-appavailability": {},
"cordova-plugin-qrscanner": {},
"cordova-plugin-app-version": {},
"cordova.plugins.diagnostic": {
"ANDROID_SUPPORT_VERSION": "28.+"
},
"cordova-custom-config": {},
"cordova-plugin-browsertab": {
"CUSTOM_TAB_COLOR_RGB": "#ffffff",
"ANDROID_SUPPORT_TABS_VERSION": "26.+"
},
"cordova-plugin-add-swift-support": {},
"cordova-universal-links-plugin": {},
"cordova-plugin-inappbrowser": {},
"cordova-plugin-chooser": {},
"cordova-plugin-androidx-adapter": {},
"cordova-plugin-onegini": {},
"cordova-plugin-filepath": {},
"cordova-plugin-contentprovider": {},
"cordova-plugin-file-transfer-ios-fix": {},
"cordova-plugin-firebase-dynamiclinks": {
"APP_DOMAIN_NAME": "",
"APP_DOMAIN_PATH": "/",
"ANDROID_FIREBASE_DYNAMICLINKS_VERSION": "20.1.+"
},
"@havesource/cordova-plugin-push": {
"ANDROIDX_CORE_VERSION": "1.6.+",
"FCM_VERSION": "18.+"
},
"cordova-plugin-android-fingerprint-auth": {},
"cordova-plugin-touch-id": {},
"cordova-clipboard": {},
"cordova-plugin-media": {},
"cordova-plugin-networkinterface": {},
"cordova-plugin-ms-appinsights": {
"INSTRUMENTATION_KEY": ""
},
"@globules-io/cordova-plugin-ios-xhr": {},
"cordova-plugin-x-socialsharing": {},
"cordova-open-native-settings": {},
"cordova-plugin-start-partner-app": {}
},
"platforms": [
"ios",
"android"
]
}
}

@viktor-shmigol
Copy link

@erisu I got it working. The problem was in "FCM_VERSION": "18.+" setting.
I've changed it to "FCM_VERSION": "23.+" and errors disappeared.
E.g:

  "plugins": {
    "@havesource/cordova-plugin-push": {
      "ANDROIDX_CORE_VERSION": "1.6.+",
      "FCM_VERSION": "23.+"
    }

@erisu
Copy link

erisu commented Oct 25, 2022

  --- Start of Cordova JSON Snippet ---
  {
    "plugins": {

     "@havesource/cordova-plugin-push": {
       "ANDROID_SUPPORT_V13_VERSION": "28.0.0",
       "FCM_VERSION": "18.+",
       "IOS_FIREBASE_MESSAGING_VERSION": "~> 6.32.2",
       "ANDROIDX_CORE_VERSION": "1.6.+"
     },
     ...
  }

It seems you still have old plugin configurations.

  • FMC_VERSION should be 23.+.
  • I dont have ANDROID_SUPPORT_V13_VERSION defined anymore and shouldnt be used either way. That was to use define which version of the old Android Support Library to use by AnrdoidX is the new version.

@erisu
Copy link

erisu commented Oct 25, 2022

@erisu I got it working. The problem was in "FCM_VERSION": "18.+" setting. I've changed it to "FCM_VERSION": "23.+" and errors disappeared. E.g:

Great 👍

@erisu
Copy link

erisu commented Oct 25, 2022

@Mister-CK Looking at the package.json you provided, it also has the same old configurations. After correcting the version, it should work for you as well.

@erisu
Copy link

erisu commented Oct 25, 2022

@Mister-CK correction, looking at the version of the plugin that you have installed, the configurations version of the FCM library is correct.

What I am confused on, is how you are getting these errors in your build:

Task :app:compileDebugKotlin FAILED
e: app/src/main/java/com/adobe/phonegap/push/PushPlugin.kt: (466, 57): Unresolved reference: token
e: app/src/main/java/com/adobe/phonegap/push/PushPlugin.kt: (619, 57): Unresolved reference: deleteToken

Line 466 of the PushPlugin.kt in the version that your using is } catch (e: IllegalStateException) {
Line 619 of the PushPlugin.kt in the version that your using is * Remove Shared Preferences

But in the main branch, those lines do have token and deleteToken. And the errors would appear because the configured FCM version is wrong.

Seems your using the newer code but have defined the older plugin version in package.json and have still olde FCM configured.

You might want to uninstall and reinstall with this repo's main branch to test.

@Mister-CK
Copy link

@Mister-CK Looking at the package.json you provided, it also has the same old configurations. After correcting the version, it should work for you as well.

I mean, it's Cordova, it's full of old configurations, but most of them I cannot update without breaking have a dozen plugins. I tried specifying "FCM_VERSION": "23.+", but that did not help.

Also, I don't feel confident about adding the master branch as the dependency (without version pinning). Even if this PR does work on a clean build. It breaks our build, without accompanying changes. So how do I know that won't happen again.

I'll try again in a few days when I have more time, but for now I really need to get push notifications working, so I'll keep using the patch.

@marioshtika
Copy link

@Mister-CK from your package.json file it looks like you are still using v3.0.1

push-3 0 1

As @erisu mentioned you should, uninstall and reinstall with this repo's main branch to test.

Also, try deleting your node_modules folder, it will help you remove any old code saved/cached in there.

@Mister-CK
Copy link

I know, I did that. What I am saying is that that doesn't work for me! of course I tried deleting node_modules, plugins and platforms while rebuilding.

@Mister-CK from your package.json file it looks like you are still using v3.0.1

push-3 0 1

As @erisu mentioned you should, uninstall and reinstall with this repo's main branch to test.

Also, try deleting your node_modules folder, it will help you remove any old code saved/cached in there.

I know, I did that. What I am saying is that that doesn't work for me! of course I tried deleting node_modules, plugins and platforms while rebuilding.

@Mister-CK
Copy link

I send you the package.json of my build using the patch. The errors occur when I delete the plugin and instead install the master branch of the plugin

@marioshtika
Copy link

Also, I don't feel confident about adding the master branch as the dependency (without version pinning). Even if this PR does work on a clean build. It breaks our build, without accompanying changes. So how do I know that won't happen again.

@Mister-CK you can try pinning it to that specifc commit.

"@havesource/cordova-plugin-push": "git+https://github.com/havesource/cordova-plugin-push.git#c3fb5b8",

@Mister-CK
Copy link

thanks, I didn't know that, that is very useful!

@erisu
Copy link

erisu commented Oct 25, 2022

@marioshtika @viktor-shmigol

For now, I published the current main branch (4.0.0.dev.0) as a dev release. This allows you to use the dev tag in the mean time. It contains this PR.

cordova plugin add @havesource/cordova-plugin-push@dev

@Mister-CK
Copy link

For now, I published the current main branch (4.0.0.dev.0) as a dev release. This allows you to use the dev tag in the mean time. It contains this PR.

cordova plugin add @havesource/cordova-plugin-push@dev

@erisu
I removed the plugin and added that dev version. It automatically updated the "FCM_VERSION": "23.+", and somehow it worked!
Sorry I was so adamant that it didn't, I am not sure why it works now, and didn't before. I did specify that version manually... I guess I did something wrong or in the wrong order.
Thanks anyway!

@xinfengmich
Copy link

xinfengmich commented Oct 25, 2022

Unfortunately 4.0.0.dev.0 fixed the Android push issue under Android 12 #198, but it broke the iOS build as:
/Plugins/@havesource/cordova-plugin-push/PushPlugin.m:58:31: error: no visible @interface for 'FIRMessaging'
declares the selector 'tokenWithCompletion:'
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) {
~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~~~~~

@havesource havesource locked as resolved and limited conversation to collaborators Oct 26, 2022
@erisu
Copy link

erisu commented Oct 26, 2022

The contents of this PR has been tested and confirmed. I will mark the PR as resolved so we do not keep talking in one area.

If there are any new issues, please create a new ticket with details and steps to reproduce so we can focus on the discussion in its own ticket.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Compatibility with Android 12 / targetSdkVersion 31
8 participants