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

NotificationService: Indirect notification activity start (trampoline) from com.xxx.xxx blocked #884

Closed
oliviermtl opened this issue Jul 8, 2022 · 12 comments

Comments

@oliviermtl
Copy link

On Android 12, when app is killed or in background, tapping the notification does not open the app.
Adb logcat shows : NotificationService: Indirect notification activity start (trampoline) from com.xxx.xxx blocked
Turning off NOTIFICATION_TRAMPOLINE_BLOCK in App Compatibility Changes makes the app open after tapping the notification.

"react-native-notifications": "^4.3.1"
"react-native": "0.68.2"

  "dependencies": {
    "@apollo/client": "^3.3.19",
    "@datadog/mobile-react-native": "^1.0.0-rc9",
    "@datadog/mobile-react-navigation": "^1.0.0-rc9",
    "@formatjs/intl-datetimeformat": "^6.0.2",
    "@formatjs/intl-getcanonicallocales": "^2.0.2",
    "@formatjs/intl-locale": "^3.0.2",
    "@formatjs/intl-numberformat": "^8.0.2",
    "@formatjs/intl-pluralrules": "^5.0.2",
    "@gorhom/bottom-sheet": "^4.2.2",
    "@mapbox/polyline": "^1.1.1",
    "@react-native-async-storage/async-storage": "^1.17.3",
    "@react-native-community/blur": "^3.6.0",
    "@react-native-community/clipboard": "^1.5.1",
    "@react-native-community/datetimepicker": "^3.4.7",
    "@react-native-community/geolocation": "^2.0.2",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-native-community/progress-bar-android": "^1.0.4",
    "@react-native-firebase/analytics": "11.5.0",
    "@react-native-firebase/app": "11.5.0",
    "@react-native-firebase/iid": "^11.5.0",
    "@react-navigation/bottom-tabs": "^6.3.1",
    "@react-navigation/elements": "^1.3.3",
    "@react-navigation/material-top-tabs": "^6.2.1",
    "@react-navigation/native": "^6.0.10",
    "@react-navigation/stack": "^6.2.1",
    "@rnhooks/keyboard": "^1.1.0",
    "@sayem314/react-native-keep-awake": "^1.1.0",
    "@stripe/stripe-react-native": "^0.12.0",
    "card-validator": "^8.1.0",
    "country-telephone-data": "^0.6.2",
    "date-fns": "2.28.0",
    "date-fns-tz": "1.3.4",
    "detox": "19.6.0",
    "email-validator": "^2.0.4",
    "fluxible-js": "^6.0.8",
    "graphql": "^15.5.0",
    "i18n-js": "^3.8.0",
    "libphonenumber-js": "^1.9.17",
    "lodash": "^4.17.21",
    "lodasync": "^1.0.7",
    "lottie-ios": "3.2.3",
    "lottie-react-native": "^5.0.1",
    "password-validator": "^5.0.3",
    "patch-package": "^6.4.7",
    "paynowqr": "^1.1.2",
    "postinstall-postinstall": "^2.1.0",
    "qs": "^6.10.1",
    "react": "17.0.2",
    "react-airplay": "^1.1.2",
    "react-countdown": "^2.3.2",
    "react-dom": "^17.0.2",
    "react-fluxible": "^6.0.4",
    "react-interval-hook": "^1.1.3",
    "react-native": "0.68.2",
    "react-native-appstate-hook": "^1.0.5",
    "react-native-avoid-softinput": "^2.4.4",
    "react-native-background-fetch": "^4.1.0",
    "react-native-background-geolocation": "^4.8.0",
    "react-native-blob-util": "^0.13.16",
    "react-native-calendars": "^1.1284.0",
    "react-native-config": "^1.4.5",
    "react-native-country-picker-modal": "^2.0.0",
    "react-native-device-info": "^8.7.1",
    "react-native-document-picker": "^6.0.4",
    "react-native-fast-image": "^8.5.11",
    "react-native-flags": "^1.0.0",
    "react-native-gesture-handler": "^2.3.2",
    "react-native-headphone-detection": "^1.3.0",
    "react-native-hyperlink": "^0.0.19",
    "react-native-image-crop-picker": "^0.37.3",
    "react-native-image-pan-zoom": "^2.1.12",
    "react-native-inappbrowser-reborn": "^3.6.3",
    "react-native-keyboard-aware-scroll-view": "^0.9.5",
    "react-native-loading-spinner-overlay": "^2.0.0",
    "react-native-localize": "^2.1.5",
    "react-native-maps": "^0.30.1",
    "react-native-modal": "^11.10.0",
    "react-native-modal-datetime-picker": "^9.2.3",
    "react-native-notifications": "^4.3.1",
    "react-native-pager-view": "^5.4.15",
    "react-native-parsed-text": "^0.0.22",
    "react-native-permissions": "^3.3.1",
    "react-native-picker-scrollview": "^1.0.1",
    "react-native-qrcode-svg": "^6.1.1",
    "react-native-reanimated": "^2.8.0",
    "react-native-safe-area-context": "^4.2.4",
    "react-native-screens": "^3.13.1",
    "react-native-snap-carousel": "^4.0.0-beta.6",
    "react-native-svg": "^12.1.1",
    "react-native-swipe-gestures": "^1.0.5",
    "react-native-tab-view": "^3.1.1",
    "react-native-toast-message": "^2.1.5",
    "react-native-twilio-programmable-voice": "https://github.com/hoxfon/react-native-twilio-programmable-voice#feat/twilio-android-sdk-5",
    "react-native-twilio-video-webrtc": "2.1.0",
    "react-native-version-check": "^3.4.2",
    "react-native-view-pdf": "^0.13.2",
    "react-native-webview": "^11.18.2",
    "react-navigation-backhandler": "^2.0.1",
    "react-timer-hook": "^3.0.2",
    "react-use-websocket": "^3.0.0",
    "regex-escape": "^3.4.10",
    "styled-components": "^5.3.5",
    "timekeeper": "^2.2.0",
    "timezone-mock": "^1.3.2",
    "urijs": "^1.19.11",
    "use-async-effect": "^2.2.3",
    "yup": "^0.32.11"
  },

build.gradle

import org.apache.tools.ant.taskdefs.condition.Os

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

buildscript {
    ext {
        googlePlayServicesLocationVersion = "17.0.0"
        ndkVersion = "20.1.5948944"
        googlePlayServicesVersion = "+" // default: "+"
        firebaseMessagingVersion = "21.1.0"
        buildToolsVersion = "31.0.0"
        minSdkVersion = 21
        compileSdkVersion = 31
        targetSdkVersion = 31
        androidXBrowser = "1.3.0"
        kotlinVersion = '1.6.0'
        appCompatVersion = "1.1.0" 

        if (System.properties['os.arch'] == "aarch64") {
            // For M1 Users we need to use the NDK 24 which added support for aarch64
            ndkVersion = "24.0.8215888"
        } else {
            // Otherwise we default to the side-by-side NDK version from AGP.
            ndkVersion = "21.4.7075529"
        }
    }
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath("com.android.tools.build:gradle:7.0.4")
        classpath("com.facebook.react:react-native-gradle-plugin")
        classpath("de.undercouch:gradle-download-task:4.1.2")
        classpath 'com.google.gms:google-services:4.3.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }
        mavenCentral {
            // We don't want to fetch react-native from Maven Central as there are
            // older versions over there.
            content {
                excludeGroup "com.facebook.react"
            }
        }

        maven {
            // Required for react-native-background-geolocation
             url("${project(':react-native-background-geolocation').projectDir}/libs")
         }
         maven {
            // Required for react-native-background-fetch
            url("${project(':react-native-background-fetch').projectDir}/libs")
         }
        google()
        jcenter()
        maven { url 'https://www.jitpack.io' }
        maven {
            // All of Detox' artifacts are provided via the npm module
            url "$rootDir/../node_modules/detox/Detox-android"
        }
    }
}

manifest
`

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MICROPHONE" />

<uses-feature
    android:name="android.hardware.camera"
    android:required="false" />
<uses-feature
    android:name="android.hardware.camera.autofocus"
    android:required="false" />
<uses-feature
    android:name="android.hardware.microphone"
    android:required="false" />

<application
    android:name=".MainApplication"
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:requestLegacyExternalStorage="true"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme">
    <meta-data android:name="com.transistorsoft.locationmanager.license" android:value="@string/TRANSISTORSOFT_GEOLOCATION_APIKEY" />

    <!-- Twilio Voice -->
    <!-- [START fcm_listener] -->
    <service
        android:name="com.hoxfon.react.RNTwilioVoice.fcm.VoiceFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <!-- [END fcm_listener] -->

    <receiver
        android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
        android:protectionLevel="signature"
        android:permission="com.google.android.c2dm.permission.SEND"
        tools:replace="android:protectionLevel">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </receiver>
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:exported="false"
        android:resource="@mipmap/ic_notification" />
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:exported="false"
        android:value="@string/GOOGLE_API_KEY" />

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />

    <activity
        android:name=".MainActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode"
        android:label="@string/app_name"
        android:launchMode="singleTask"
        android:windowSoftInputMode="adjustPan"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
        </intent-filter>
    </activity>
    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
`
@oliviermtl
Copy link
Author

Downgrading targetSdkVersion to 30, solves the issue, the notification is still flagged as indirect but is not blocked.

@stale
Copy link

stale bot commented Aug 14, 2022

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs.

@stale stale bot added the 🏚 stale label Aug 14, 2022
@brsaylor2
Copy link

I'm seeing this issue with v4.3.1.

@stale
Copy link

stale bot commented Sep 8, 2022

The issue has been closed for inactivity.

@stale stale bot closed this as completed Sep 8, 2022
@xgbn
Copy link

xgbn commented Sep 20, 2022

I am also seeing this issue with 4.3.1

@raphaelpare
Copy link

raphaelpare commented Nov 21, 2022

Solved by downgrading targetSdkVersion = 31 to targetSdkVersion = 30 in build.gradle

Edit : Unfortunatly with this change in targetSdkVersion, you cannot deploy on google play store your app because it now requires at least version 31 for security reasons.
A fix for this issue is highly needed

@tjadliupgrade
Copy link

Still seeing the issue even with 4.3.3

@tsalama
Copy link

tsalama commented Dec 29, 2022

Same here. Can this be reopened??

@asdemura
Copy link

When app is killed notification is created by firebase so we need to update firebase core library for targetSdkVersion>30.
In file
./android/app/build.gradle
replace
implementation 'com.google.firebase:firebase-core:16.0.0'
by
implementation platform('com.google.firebase:firebase-bom:31.1.1')
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-analytics'

./android/app/build.gradle

dependencies {
    ...
    implementation project(':react-native-notifications')
    implementation platform('com.google.firebase:firebase-bom:31.1.1')
    implementation 'com.google.firebase:firebase-messaging'
    implementation 'com.google.firebase:firebase-analytics'
}  

@ginoraviola
Copy link

Thank you @asdemura, I was facing the same issue and your fix did the trick 👍

@quizzyDev
Copy link

This seems to still be an issue with version 4.3.5 - Android push notifications do not open the app and if you look at the log cat in Android studio you see NotificationService: Indirect notification activity start (trampoline) from com.xxx.xxx blocked

@asdemura 's workaround fixes the issue for us.

@vnanhtuan
Copy link

Thank you @asdemura, I fixed my issue and the app works well

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

No branches or pull requests

10 participants