Cannot update application in Play Market because of background location permission (expo 40.0.0)

Hello!
Im using expo 40.0.0 and im facing issue with submitting android build to the play store, it asks me to turn off permissions for background location service, and i put an empty array to expo.android.permissions in app.json and here’s my permissions:

android.permission.ACCESS_NETWORK_STATE, 
android.permission.ACCESS_WIFI_STATE, 
android.permission.FOREGROUND_SERVICE, 
android.permission.INTERNET, 
android.permission.MODIFY_AUDIO_SETTINGS, 
android.permission.READ_APP_BADGE, 
android.permission.RECEIVE_BOOT_COMPLETED, 
android.permission.SYSTEM_ALERT_WINDOW, 
android.permission.WAKE_LOCK, 
com.bitzlatoapp.p2p.permission.C2D_MESSAGE, 
com.google.android.c2dm.permission.RECEIVE, 
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE, 
com.huawei.android.launcher.permission.CHANGE_BADGE, 
com.huawei.android.launcher.permission.READ_SETTINGS, 
com.huawei.android.launcher.permission.WRITE_SETTINGS, 
com.oppo.launcher.permission.READ_SETTINGS, 
com.oppo.launcher.permission.WRITE_SETTINGS, 
com.sonymobile.home.permission.PROVIDER_INSERT_BADGE, 
host.exp.exponent.permission.C2D_MESSAGE, 
me.everything.badger.permission.BADGE_COUNT_READ, 
me.everything.badger.permission.BADGE_COUNT_WRITE

tried to do everything mentioned here and still no result. I already have release with all permissions on play market and now google wants me to describe permissions, that i don’t even use, and even does not allow me to update my new build without permissions. I tried to make all kinds of test releases and still no luck.

Even i don’t have a switcher in the “locations permissions” menu to turn off location services. Still waiting for response from Play Console support for this one, but maybe, im doing something wrong?

Hi @bitzlato! Thanks for writing in. We’ve had quite some reports about the background permission being triggered in the Play Store, even though it’s not included in the binary.

It’s a good thing you contacted Play Store support. In the list of permissions you provided, there are no permissions related to location. If you want us to double-check some stuff, please provide the answers to the following questions.

  1. Are you using managed or bare app?
  2. What SDK version do you use? (In your case, this would be SDK 40)
  3. What packages do you use? (e.g. list your package.json)
  4. What is the output of aapt2 d permissions path/to/app.apk (See this installation/usage guide of aapt2)
  5. What is the name of your app (e.g. @acme/app)

If you hear back from Google, please let us know! If it contains private info, you can mail secure@expo.io and mention me.

Hope this helps!

  1. Managed workflow
  2. SDK 40
{
        "@expo/vector-icons": "^12.0.0",
        "@improbable-eng/grpc-web-react-native-transport": "^0.13.0",
        "@react-native-community/masked-view": "0.1.10",
        "@react-navigation/bottom-tabs": "^5.9.2",
        "@react-navigation/material-bottom-tabs": "^5.3.0",
        "@react-navigation/material-top-tabs": "^5.2.16",
        "@react-navigation/native": "^5.0.8",
        "@react-navigation/stack": "^5.1.0",
        "@storybook/addon-actions": "^6.0.22",
        "@storybook/addon-essentials": "^6.0.22",
        "@storybook/addon-links": "^6.0.22",
        "@storybook/addon-ondevice-actions": "^5.3.23",
        "@storybook/react-native": "^5.3.23",
        "@types/react-redux": "^7.1.7",
        "@types/redux-form": "^8.2.6",
        "@types/socket.io-client": "^1.4.33",
        "@types/styled-components": "^5.1.2",
        "@use-expo/font": "^2.0.0",
        "axios": "^0.19.2",
        "bchaddrjs": "^0.5.2",
        "cashaddrjs": "^0.4.4",
        "debug": "^4.1.1",
        "expo": "^40.0.0",
        "expo-analytics-amplitude": "~9.0.0",
        "expo-app-loading": "^1.0.1",
        "expo-auth-session": "~3.0.0",
        "expo-constants": "~9.3.3",
        "expo-image-picker": "~9.2.0",
        "expo-linear-gradient": "~8.4.0",
        "expo-local-authentication": "~9.5.0",
        "expo-localization": "~9.1.0",
        "expo-notifications": "~0.8.2",
        "expo-permissions": "~10.0.0",
        "expo-random": "~10.0.0",
        "expo-secure-store": "~9.3.0",
        "expo-web-browser": "~8.6.0",
        "formik": "^2.2.1",
        "i18next": "^19.4.1",
        "i18next-express-middleware": "^1.9.1",
        "moment-timezone": "^0.5.28",
        "node-libs-browser": "^2.2.1",
        "patch-package": "^6.2.2",
        "query-string": "^6.12.0",
        "react": "16.13.1",
        "react-dev-utils": "^10.2.1",
        "react-dom": "16.13.1",
        "react-i18next": "^11.3.4",
        "react-native": "https://github.com/expo/react-native/archive/sdk-40.0.1.tar.gz",
        "react-native-app-intro-slider": "4.0.0",
        "react-native-app-link": "^1.0.0",
        "react-native-collapsible": "^1.5.3",
        "react-native-confirmation-code-field": "^6.5.1",
        "react-native-gesture-handler": "~1.8.0",
        "react-native-get-random-values": "^1.5.0",
        "react-native-jose": "git+https://github.com/hellojoko/react-native-jose.git",
        "react-native-paper": "^3.6.0",
        "react-native-picker-select": "^7.0.0",
        "react-native-popover-view": "3.1.1",
        "react-native-qrcode-svg": "^6.0.6",
        "react-native-reanimated": "~1.13.0",
        "react-native-safe-area-context": "3.1.9",
        "react-native-screens": "~2.15.0",
        "react-native-snap-carousel": "^3.8.4",
        "react-native-svg": "12.1.0",
        "react-native-tab-view": "^2.15.1",
        "react-native-toaster": "^1.2.2",
        "react-native-vector-icons": "^7.1.0",
        "react-native-version-check-expo": "^3.4.1",
        "react-native-web": "~0.13.12",
        "react-navigation": "^4.2.2",
        "react-number-format": "^4.4.1",
        "react-redux": "^7.2.0",
        "react-test-renderer": "^16.13.1",
        "redux": "^4.0.5",
        "redux-form": "^8.3.1",
        "redux-persist": "^6.0.0",
        "redux-persist-expo-filesystem": "^2.0.0",
        "redux-persist-expo-securestore": "^2.0.0",
        "redux-thunk": "^2.3.0",
        "sentry-expo": "^2.1.2",
        "socket.io-client": "2.1.1",
        "styled-components": "^5.1.1",
        "uuid": "^8.3.1",
        "wallet-address-validator": "^0.2.4",
        "web3": "^1.2.6",
        "web3-utils": "^1.2.6",
        "expo-linking": "~2.0.0"
    }
package: com.bitzlatoapp.p2p
permission: com.bitzlatoapp.p2p.permission.C2D_MESSAGE
uses-permission: name='com.bitzlatoapp.p2p.permission.C2D_MESSAGE'
uses-permission: name='com.google.android.c2dm.permission.RECEIVE'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.INTERNET'
uses-permission: name='android.permission.SYSTEM_ALERT_WINDOW'
uses-permission: name='android.permission.WAKE_LOCK'
uses-permission: name='host.exp.exponent.permission.C2D_MESSAGE'
uses-permission: name='android.permission.MODIFY_AUDIO_SETTINGS'
uses-permission: name='android.permission.ACCESS_WIFI_STATE'
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='android.permission.FOREGROUND_SERVICE'
uses-permission: name='com.sonymobile.home.permission.PROVIDER_INSERT_BADGE'
uses-permission: name='com.huawei.android.launcher.permission.CHANGE_BADGE'
uses-permission: name='com.huawei.android.launcher.permission.READ_SETTINGS'
uses-permission: name='com.huawei.android.launcher.permission.WRITE_SETTINGS'
uses-permission: name='android.permission.READ_APP_BADGE'
uses-permission: name='com.oppo.launcher.permission.READ_SETTINGS'
uses-permission: name='com.oppo.launcher.permission.WRITE_SETTINGS'
uses-permission: name='me.everything.badger.permission.BADGE_COUNT_READ'
uses-permission: name='me.everything.badger.permission.BADGE_COUNT_WRITE'
uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE'

@bitzlato/p2p_rn

getting this exact same thing.

  1. Managed
  2. Upgraded to 40, but had the same issue with 39.
"dependencies": {
    "@apollo/client": "^3.2.2",
    "@bugsnag/expo": "^7.5.3",
    "@react-native-community/async-storage": "~1.12.0",
    "@react-native-community/masked-view": "0.1.10",
    "@react-navigation/bottom-tabs": "^5.3.3",
    "@react-navigation/drawer": "^5.5.1",
    "@react-navigation/native": "^5.1.5",
    "@react-navigation/stack": "^5.2.10",
    "apollo3-cache-persist": "^0.6.0",
    "expo": "^40.0.1",
    "expo-app-loading": "^1.0.1",
    "expo-background-fetch": "~8.6.0",
    "expo-notifications": "~0.8.2",
    "expo-permissions": "~10.0.0",
    "expo-sharing": "~8.5.0",
    "expo-task-manager": "~8.6.0",
    "graphql": "^15.0.0",
    "moment": "^2.25.3",
    "react": "16.13.1",
    "react-devtools": "^4.6.0",
    "react-dom": "16.13.1",
    "react-native": "https://github.com/expo/react-native/archive/sdk-40.0.1.tar.gz",
    "react-native-elements": "2.3.2",
    "react-native-gesture-handler": "~1.8.0",
    "react-native-picker-select": "7.0.0",
    "react-native-reanimated": "~1.13.0",
    "react-native-safe-area-context": "3.1.9",
    "react-native-safe-area-view": "^1.0.0",
    "react-native-screens": "~2.15.2",
    "react-native-web": "~0.13.12"
  },
  "devDependencies": {
    "@babel/core": "~7.9.0",
    "babel-preset-expo": "8.3.0",
    "patch-package": "^6.2.2"
  },
  1. package: com.sharksb.app
    permission: com.sharksb.app.permission.C2D_MESSAGE
    uses-permission: name=‘com.sharksb.app.permission.C2D_MESSAGE’
    uses-permission: name=‘com.google.android.c2dm.permission.RECEIVE’
    uses-permission: name=‘android.permission.ACCESS_NETWORK_STATE’
    uses-permission: name=‘android.permission.INTERNET’
    uses-permission: name=‘android.permission.SYSTEM_ALERT_WINDOW’
    uses-permission: name=‘android.permission.WAKE_LOCK’
    uses-permission: name=‘android.permission.READ_EXTERNAL_STORAGE’
    uses-permission: name=‘android.permission.WRITE_EXTERNAL_STORAGE’
    uses-permission: name=‘android.permission.WRITE_SETTINGS’
    uses-permission: name=‘android.permission.VIBRATE’
    uses-permission: name=‘android.permission.READ_PHONE_STATE’
    uses-permission: name=‘android.permission.NOTIFICATIONS’
    uses-permission: name=‘com.android.launcher.permission.UPDATE_COUNT’
    uses-permission: name=‘com.android.launcher.permission.INSTALL_SHORTCUT’
    uses-permission: name=‘com.google.android.c2dm.permission.RECEIVE’
    uses-permission: name=‘com.google.android.gms.permission.ACTIVITY_RECOGNITION’
    uses-permission: name=‘com.google.android.providers.gsf.permission.READ_GSERVICES’
    uses-permission: name=‘com.htc.launcher.permission.READ_SETTINGS’
    uses-permission: name=‘com.htc.launcher.permission.UPDATE_SHORTCUT’
    uses-permission: name=‘com.majeur.launcher.permission.UPDATE_BADGE’
    uses-permission: name=‘com.sec.android.provider.badge.permission.READ’
    uses-permission: name=‘com.sec.android.provider.badge.permission.WRITE’
    uses-permission: name=‘com.sonyericsson.home.permission.BROADCAST_BADGE’
    uses-permission: name=‘host.exp.exponent.permission.C2D_MESSAGE’
    uses-permission: name=‘android.permission.MODIFY_AUDIO_SETTINGS’
    uses-permission: name=‘android.permission.ACCESS_WIFI_STATE’
    uses-permission: name=‘android.permission.RECEIVE_BOOT_COMPLETED’
    uses-permission: name=‘android.permission.FOREGROUND_SERVICE’
    uses-permission: name=‘com.sonymobile.home.permission.PROVIDER_INSERT_BADGE’
    uses-permission: name=‘com.huawei.android.launcher.permission.CHANGE_BADGE’
    uses-permission: name=‘com.huawei.android.launcher.permission.READ_SETTINGS’
    uses-permission: name=‘com.huawei.android.launcher.permission.WRITE_SETTINGS’
    uses-permission: name=‘android.permission.READ_APP_BADGE’
    uses-permission: name=‘com.oppo.launcher.permission.READ_SETTINGS’
    uses-permission: name=‘com.oppo.launcher.permission.WRITE_SETTINGS’
    uses-permission: name=‘me.everything.badger.permission.BADGE_COUNT_READ’
    uses-permission: name=‘me.everything.badger.permission.BADGE_COUNT_WRITE’
    uses-permission: name=‘com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE’

  2. @markmohr15/shark-sb

I am declaring permissions in my app.json file. Here’s the relevant section:

"android": {
      "package": "com.sharksb.app",
      "versionCode": 21,
      "useNextNotificationsApi": true,
      "googleServicesFile": "./google-services.json",
      "permissions": ["READ_EXTERNAL_STORAGE", "WRITE_EXTERNAL_STORAGE",
                    "WRITE_SETTINGS", "VIBRATE", "READ_PHONE_STATE",
                    "com.anddoes.launcher.permission.UPDATE_COUNT",
                    "com.android.launcher.permission.INSTALL_SHORTCUT",
                    "com.google.android.c2dm.permission.RECEIVE",
                    "com.google.android.gms.permission.ACTIVITY_RECOGNITION",
                    "com.htc.launcher.permission.READ_SETTINGS",
                    "com.htc.launcher.permission.UPDATE_SHORTCUT",
                    "com.majeur.launcher.permission.UPDATE_BADGE",
                    "com.sec.android.provider.badge.permission.READ",
                    "com.sec.android.provider.badge.permission.WRITE",
                    "com.sonyericsson.home.permission.BROADCAST_BADGE"]
    },

I wrote up an issue with more context about this. @markmohr15 and @bitzlato it looks like you’ve done everything right in the latest builds. It might be good to double-check if you have any older binary/standalone apps that include this permission somewhere in your release tracks. If that’s also not the case, the only thing left is to contact Google about it.

3 Likes

Yeah, i have a build already in production with all permissions, but i dont know how to delete them and make all new release. But anyway, while making a new build without permissions i still facing the problem.

Or nevertheless - i need to delete older production builds?

I don’t think existing builds in production are affected by this. At least, forcing app developers to remove working/rolled-out apps would be a bad move from Google in my opinion.

I can only recommend taking a look at all your other tracks, e.g. alpha/beta/testing tracks. Just to confirm that you have no “left over binaries” with this permission included. When that still doesn’t work, you could go the extra mile and see what happens if you submit it as a new app (just to pass the automated checks, not to actually replace the app).

Would love to hear Google’s response too, if you receive it. You can find me on Slack and/or Discord to chat about this! (same username)

1 Like