App update rejected due to Foreground service permissions

I am using the Meeting SDK (v5.17.1.18530) to create a custom UI app.

The app is built targeting SDK 34 (Android 14), so Google needs specific information about how the app uses foreground services.

Google rejected the latest app update because I need to provide more information about the foreground service.

Violation:
Permissions for Foreground Services: Functionality is not initiated by or perceptible to the user

Details:
We found that one or more of the declared use cases is not compliant with how foreground service permission is allowed to be used. Specifically, the user is not made aware of functionality requiring permission when active.

  • Use of FGS is not perceptible to the user when performing Media Playback - Media Playback, Media Projection - Media and Content Projection and Streaming functionality.

Google is asking me for a video that shows how my application uses the following features in the foreground service.

android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION
android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK

They are added to my app by Zoom Meeting SDK for ScreenShareServiceForSDK

Unfortunately, I do not use the Zoom sdk screen sharing feature in my application, so I cannot provide a video.

I have tried to remove FOREGROUND_SERVICE_MEDIA_PROJECTION and FOREGROUND_SERVICE_MEDIA_PLAYBACK from my app manifest but in this case my app crashes on Android 14 due to SecurityException starting FGS with type mediaPlayback. It happens at the start of the Zoom meeting.

Fatal Exception: java.lang.RuntimeException
Unable to create service com.zipow.videobox.share.ScreenShareServiceForSDK: java.lang.SecurityException: Starting FGS with type mediaPlayback callerApp=ProcessRecord{d0c5093 11843:my.app/u0a416} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK]

with the following callstack:

Fatal Exception: java.lang.RuntimeException: Unable to create service com.zipow.videobox.share.ScreenShareServiceForSDK: java.lang.SecurityException: Starting FGS with type mediaPlayback callerApp=ProcessRecord{d0c5093 11843:my.app/u0a416} targetSDK=34 requires permissions: all of the permissions allOf=true [android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK]
at android.app.ActivityThread.handleCreateService(ActivityThread.java:5111)
at android.app.ActivityThread.-$$Nest$mhandleCreateService()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2506)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8893)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:608)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)

How can I proceed?
Can I configure the Zoom sdk for starting the Zoom meeting foreground service without the SERVICE_MEDIA_PROJECTION and MEDIA_PLAYBACK types?

1 Like

I facing same issue

can some one please explain why need these permissions

Same issues here.
We cannot update our App on Google Play Store because of the issue.
Any work around?

I haven’t found a real workaround yet, but in the meantime I’ve rolled back my app to target SDK 33, but keep compiling SDK 34. This way, I can minimize the changes required to roll back to the previous version of the target SDK.

buildToolsVersion = '34.0.0'

compileSdk 34

targetSdk 33

This way I can bypass the foreground services check that is only required for Target SDK 34.

I am not sure, but it seems that the 5.17.x Meeting Zoom SDK is not really compatible with Target SDK 34, even though it has been declared Android 14 ready.

I’m also facing the same issue
but for videosdk

I had the same issue with meeting SDK. It would be nice if the Zoom team made a page that declares why Zoom SDKs use those permissions so I can explain it to the Google Play team. I had been rejected many times before with the same issues relevant to permissions required by Zoom SDK

Hi everyone,

Thanks for the post. These permissions are required for screen sharing and Bluetooth audio devices. Here is the explanation of each permission:

FOREGROUND_SERVICE_MICROPHONE : Allow the capability to receive audio when the app is put in the background

FOREGROUND_SERVICE_MEDIA_PLAYBACK: Allow the capability to share audio while screen sharing

FOREGROUND_SERVICE_MEDIA_PROJECTION: Allow the capability to project the screen while screen sharing

FOREGROUND_SERVICE_CONNECTED_DEVICE: Allow the capability to use Bluetooth device as the audio source

FOREGROUND_SERVICE_PHONE_CALL: Allow the capability to use Bluetooth device for the meeting call

Hope this helps. Thank you!

1 Like

Google asks me a video of my app using capability to share audio while screen sharing and a video of my app using capability to project the screen while screen sharing.

Unfortunately, my application does not implement (use) these features of the Zoom Meeting SDK, so I cannot provide a video showing how my application uses it in the foreground service.

These videos are required to publish an application targeting SDK 34.

How can I prevent the Zoom Meeting SDK from launching foreground services that use the following features?
FOREGROUND_SERVICE_MEDIA_PLAYBACK
FOREGROUND_SERVICE_MEDIA_PROJECTION
FOREGROUND_SERVICE_PHONE_CALL

I see that a new version of Zoom Meeting SDK has just been released ( 5.17.10).

The release note says that it fixes some issues related to SDK34.
https://developers.zoom.us/changelog/meeting-sdk/android/5.17.10/

Does it also fix this app publishing issue?

Based on our testing, it seems that the issue has not been resolved as we still encounter the same problem.

At the very least, in order to pass the review process, it would be necessary to send a video to Google. Therefore, we would appreciate it if Zoom SDK could provide a way to remove certain features or offer a means to pass the review process.

Especially when using Custom UI, whether to incorporate certain features depends on the developer. If we are asked to provide a video for a feature we are not using, we will not be able to comply.

Even if we do provide a video, there is a possibility that the app with Custom UI might not pass the review due to differences in appearance.

We are encountering this issue. Our implementation does not use any screen sharing capabilities, in fact we don’t allow screen sharing (using FLAG_SECURE). So FOREGROUND_SERVICE_MEDIA_PLAYBACK and FOREGROUND_SERVICE_MEDIA_PROJECTION are impossible to record a video of.

@carson.zoom, can you please elaborate on exactly what is meant by “use Bluetooth device for the meeting call”? This description seems to be materially the same as FOREGROUND_SERVICE_CONNECTED_DEVICE.

What are the exact steps are performed in the app to use both the FOREGROUND_SERVICE_PHONE_CALL and FOREGROUND_SERVICE_CONNECTED_DEVICE permissions?

For example

  1. Connect the Android phone to a Bluetooth speaker/microphone
  2. Launch the application with the embedded Zoom SDK
  3. NOTE: the audio source icon in the upper left corner defaults to bluetooth
  4. Tap on the audio source icon to toggle between phone speaker/mic and the bluetooth device.

^^^ this set of steps seems to illustrate the FOREGROUND_SERVICE_CONNECTED_DEVICE permission.

What are a similar set of steps to illustrate the feature(s) that need the FOREGROUND_SERVICE_PHONE_CALL permission?

As other people in this thread have stated, we have to prepare videos of our mobile applications (which use the embedded Zoom SDK) and show to Google that we are actually using the functionality required for each foreground service permission, and how it will appear to the end users of the combined app.

I found a solution to this problem. If your app is not using a permission at all, you can go into your AndroidManifest file and add:

<uses-permission> android:name=“android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION”
tools:node=“remove” />

and you can add this for any of the Zoom permissions that your app is not using. We just submitted our app using this method and were approved by Google. Our app is not using PHONE_CALL or MEDIA_PROJECTION.

Also, see this Android docs post for what the permissions are actually doing.

FOREGROUND_SERVICE_CONNECTED_DEVICE - Interactions with external devices that require a Bluetooth, NFC, IR, USB, or network connection.
FOREGROUND_SERVICE_MEDIA_PLAYBACK - Continue audio or video playback from the background.
FOREGROUND_SERVICE_MEDIA_PROJECTION - Project content to non-primary display or external device using the MediaProjection APIs. This content doesn’t have to be exclusively media content.
FOREGROUND_SERVICE_MICROPHONE - Continue microphone capture from the background, such as voice recorders or communication apps.
FOREGROUND_SERVICE_PHONE_CALL - Allows a regular application to use Service.startForeground with the type “phoneCall”.

1 Like

@alex.rueb_zoomdev

Removing the android permission from the manifest is not a good solution for me because if I remove FOREGROUND_SERVICE_MEDIA_PLAYBACK then the app crashes when the meeting has been started.

<uses-permission 
   android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"
tools:node="remove" />

FOREGROUND_SERVICE_MEDIA_PLAYBACK: Allow the capability to share audio while screen sharing

But my does not use screen sharing, so I am not able to provide a video, so I am stuck in upgrading to target SDK 34.

What type of video are you providing to Google to justify the FOREGROUND_SERVICE_MEDIA_PLAYBACK permission?

@criva

The video we submitted for FOREGROUND_SERVICE_MEDIA_PLAYBACK was showing that when in a call, you can background the app and still receive audio. That is the actual use of the permission. That one is definitely required for the Zoom SDK to work.

  • Have 2 devices in a call
  • Mute one device, but turn it’s volume all the way up
  • Background the muted device
  • Talk into the non-muted device
  • Make sure the video is capturing the device with the app in the background successfully receiving the audio

We also found more success with explaining in detail exactly what is going on in the video. Essentially narrating what you are doing the entire time.

Hi all,

We’ll fix this issue in our 6.0.0 release. Starting from 6.0.0, developers can remove the permission in the project manifest if the project is not using the screen-sharing feature.

<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" tools:node="remove" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" tools:node="remove" />
<service
    android:name="com.zipow.videobox.share.ScreenShareServiceForSDK"
    android:exported="false"
    android:foregroundServiceType="microphone|connectedDevice"
    tools:replace="android:foregroundServiceType"
    android:label="Zoom"/>

Thank you

Elaine

2 Likes