gdelataillade / alarm

A Flutter plugin to easily manage alarms on iOS and Android
https://pub.dev/packages/alarm
MIT License
132 stars 86 forks source link

Google restricts the use of the USE_FULL_SCREEN_INTENT permission. #222

Open pyjserv opened 4 months ago

pyjserv commented 4 months ago

Hi, @gdelataillade

I'm not sure whether I should post this in issues or discussions. Here's the situation: I developed a simple calendar app with a countdown timer and published it on the Play Store: https://play.google.com/store/apps/details?id=com.claberi.consilia

Recently, due to Google's restriction on the USE_FULL_SCREEN_INTENT permission, my app failed to pass review and I couldn't publish updates. I have appealed several times without success.

Since simply removing the declaration from my app still resulted in denial by Google, I had to download and manually remove the USE_FULL_SCREEN_INTENT declaration from the alarm plugin to pass the review.

I would like to ask if there is currently any way to request users to grant the USE_FULL_SCREEN_INTENT permission?

gdelataillade commented 4 months ago

Hi @pyjserv,

Regarding your issue with the USE_FULL_SCREEN_INTENT permission:

  1. Android 14 Default Behavior: As per this documentation, for apps installed on Android 14, the USE_FULL_SCREEN_INTENT permission is enabled by default. Ensure your app targets Android 14 (API level 34) or higher to benefit from this.
  2. App Category: Categorize your app as “alarm” in the Play Store. This aligns with the intended use of full-screen intents and can help during the review process.
  3. No Explicit Request: Unfortunately, there is no way to explicitly request the USE_FULL_SCREEN_INTENT permission from users. You need to ensure your app’s functionality complies with Google’s policies and targets the appropriate SDK.

If there are specific changes needed in the alarm plugin to support these requirements better, please let me know, and I’ll be happy to assist.

Best regards,

pyjserv commented 4 months ago

Hi, @gdelataillade

Thank you for your reply. As mentioned in the Google document you provided, starting from Android 14, only apps with alarm and call functionalities will have the USE_FULL_SCREEN_INTENT permission enabled by default. I believe I have set the app category to alarm (as shown in the picture), but the review was still rejected.

Screenshot_20240715_074132_Edge

gdelataillade commented 4 months ago

Hi @pyjserv,

When submitting your app for review, include a detailed note explaining why the full-screen intent is essential for your alarm functionality. Clearly state that the permission is necessary for delivering timely and critical alarm notifications, aligning with user expectations and the app’s primary purpose.

You can include this note in the “App Content” section under the “Privacy Policy” or “App Permissions Declaration” fields during the submission process.

Let me know if it helps.

pyjserv commented 3 months ago

Hi @gdelataillade

Unfortunately, Google informed me that the review did not pass. Due to my lack of experience and English not being my first language, I hope you or anyone can provide some advice and assistance. This is my third or fourth review rejection, and I am very confused and anxious.

In addition to appealing the USE_FULL_SCREEN_INTENT permission review, I have made other efforts:

  1. Created a short video to demonstrate how the app needs the USE_FULL_SCREEN_INTENT permission: https://www.youtube.com/shorts/IgffqLThNKA

  2. Explained the usage scenario of the USE_FULL_SCREEN_INTENT permission: _The target users of the Consilia app are students preparing for exams. These users might be studying in a quiet library and may turn off their phone screens to save power or avoid distractions. If the app is granted the USE_FULL_SCREENINTENT permission, users will be able to immediately silence any vibrations or music alarms when they go off. Without this permission, the user experience of the app will be significantly affected.

However, there are several parts of Google's response (full text here) that I am unsure if I understood correctly, so I sought help from Google with the following three questions:

"Apps that request this permission are subject to review, and those that do not meet the above criteria will not be automatically granted this permission. In that case, apps must request permission from the user to use USE_FULL_SCREEN_INTENT."

Is there really a way to request permission from the user to use USE_FULL_SCREEN_INTENT now? Whether it's an Android native method or a Flutter plugin, can you provide some clues?

"We do suggest you update the entirety of your app's store listing to accurately reflect the core functionality that requires the use of USE_FULL_SCREEN_INTENT permission."

Does this mean I need to explicitly tell users in the full description of my app’s store listing that the USE_FULL_SCREEN_INTENT permission will be used?

"Alternatively, please provide a valid video link (for example, YouTube link or any cloud storage link) by replying to this email that demonstrates the core feature’s dependency on the USE_FULL_SCREEN_INTENT permission. You may create a video demonstrating the alarm working outside the app with interactive controls or a full-screen alarm display. Note that we cannot accept downloadable video files."

I cannot understand “the alarm working outside the app with interactive controls or a full-screen alarm display,” do you have any practical examples that could help understand? Does this mean only certain types of apps, such as those showing a large clock when opened, can be recognized as alarms? I don’t understand what key content was missing in my previous demo video.

This is Google's response (full text here). After reading it, I am still very confused. I don’t know if I currently have no possibility of applying for the USE_FULL_SCREEN_INTENT permission, or if I can pass the review as long as I complete the required parts. Or did I misunderstand or misuse something?

desenvolvedor-apanheidoexcel commented 3 months ago

I'm in the same situation. App rejected by Google. Exactly the same thing. Now the different thing is that I commented this permission in the Android Manifest, but it is set somewhere else, probably in the library itself.

<!-- <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT"/> -->

pyjserv commented 3 months ago

Hi @desenvolvedor-apanheidoexcel

You're right, it's declared in alarm library. You can add tools:node="remove" to remove it.

Be sure the attribute exists in the root tag of your app's manifest: <manifest ... xmlns:tools="http://schemas.android.com/tools">

Then add tools:node="remove" in the permission declaration in your app's manifest: <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:node="remove" />

desenvolvedor-apanheidoexcel commented 3 months ago

Hi @desenvolvedor-apanheidoexcel

You're right, it's declared in alarm library. You can add tools:node="remove" to remove it.

Be sure the attribute exists in the root tag of your app's manifest: <manifest ... xmlns:tools="http://schemas.android.com/tools">

Then add tools:node="remove" in the permission declaration in your app's manifest: <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:node="remove" />

What are the consequences of not using this permission? In practice... can anyone tell me? I tested it (node=remove) on my app and everything worked normally. At first. But I haven't sent it to Google for validation yet. Will that be okay?

pyjserv commented 3 months ago

Hi @desenvolvedor-apanheidoexcel

What are the consequences of not using this permission?

You can watch my demonstration video showing the screen automatically turning on while ringing: https://www.youtube.com/shorts/IgffqLThNKA.

In my case, if I remove the declaration of the USE_FULL_SCREEN_INTENT permission, the screen will not automatically turn on while ringing.

But I haven't sent it to Google for validation yet. Will that be okay?

I did this and officially released the new version of the app. However, without the USE_FULL_SCREEN_INTENT permission, the user experience will be reduced.

desenvolvedor-apanheidoexcel commented 3 months ago

Hi @desenvolvedor-apanheidoexcel

What are the consequences of not using this permission?

You can watch my demonstration video showing the screen automatically turning on while ringing: https://www.youtube.com/shorts/IgffqLThNKA.

In my case, if I remove the declaration of the USE_FULL_SCREEN_INTENT permission, the screen will not automatically turn on while ringing.

But I haven't sent it to Google for validation yet. Will that be okay?

I did this and officially released the new version of the app. However, without the USE_FULL_SCREEN_INTENT permission, the user experience will be reduced.

Your solution really worked by removing the USE_FULL_SCREEN_INTENT permission with code above in Manifest:

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

The version was approved and published in the play store. I'll keep it that way. Thank you very much for your help.

pyjserv commented 3 months ago

Hi @gdelataillade,

Although my appeal failed, I continue to observe how others are doing it. I found that most Pomodoro apps also do not have the USE_FULL_SCREEN_INTENT permission. However, some apps wake up the screen when the reminder notification is activated (only waking up the locked screen, and the screen remains locked, unlike apps with the USE_FULL_SCREEN_INTENT permission, which directly display on the locked screen). Could you please add this feature to the new version of the alarm?

gdelataillade commented 3 months ago

Hi @gdelataillade,

Although my appeal failed, I continue to observe how others are doing it. I found that most Pomodoro apps also do not have the USE_FULL_SCREEN_INTENT permission. However, some apps wake up the screen when the reminder notification is activated (only waking up the locked screen, and the screen remains locked, unlike apps with the USE_FULL_SCREEN_INTENT permission, which directly display on the locked screen). Could you please add this feature to the new version of the alarm?

Hi @pyjserv

Yes I could add a wake lock when alarm starts ringing to make sure the screen is on. But I need to set a wake lock duration and I'm wondering how long it should be. For long durations the battery can drain but for short duration the user could miss the wake lock. What do you think ?

pyjserv commented 3 months ago

Hi @gdelataillade

But I need to set a wake lock duration and I'm wondering how long it should be.

My personal experience is that 15 to 30 seconds is enough. However, can this become a setting value in AlarmSettings?

wayupdev commented 3 months ago

Hello everyone,

I managed to pass the verification by indicating this: “My application uses an alarm that has a notification requiring immediate action from the user. See attachment”

You also need a screenshot of the notification with the clearly visible words “snooze” or “wake-up”. Representing immediate actions for the user.

Have a nice day!

pyjserv commented 3 months ago

Hi @wayupdev

Could you please provide the link to your app? I need more details to understand this part. 🙂

gdelataillade commented 2 months ago

Could you please provide the link to your app? I need more details to understand this part. 🙂

@pyjserv https://play.google.com/store/apps/details?id=com.wayup.way_up&hl=en_US

gdelataillade commented 2 months ago

Hi @pyjserv

Were you able to pass Google verification ?

pyjserv commented 2 months ago

Hi @gdelataillade

Thank you for your attention. At present, my app has not passed the Google review and I am quite confused about what to do. On the notification screen, I also have buttons like "Cancel".

Screenshot_20240831_160757_YouTube

I currently do not understand Google's standards. From my observations on Google Play, apps in the Alarm category always pass the review, while most apps in the Timer category are allowed the USER_FULL_SCREEN_INTENT permission. However, I haven't seen any Pomodoro Timer apps using the USER_FULL_SCREEN_INTENT permission. This is strange because a timer and a Pomodoro timer are so similar.

My app, Consilia, is a type of Pomodoro app that combines the Pomodoro technique with calendar-based spaced repetition. I even asked if I should put a large timer on the main screen to pass the review, but Google did not provide a direct answer and only said that my app does not belong to an allowed category.

gdelataillade commented 2 months ago

Hi @pyjserv

I'm sorry to hear that you still haven't passed the Google review. I don't understand why they argue about the USE_FULL_SCREEN_INTENT if you removed it in your app manifest like this: <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:node="remove" />

In my experience, consistently submitting your app for review and politely explaining why it meets the necessary criteria, along with providing clear screenshots and supporting materials, increases the probability of your app being accepted eventually.

Good luck and keep me updated !

pyjserv commented 2 months ago

Hi @gdelataillade

I don't understand why they argue about the USE_FULL_SCREEN_INTENT if you removed it in your app manifest

Oh, I'm sorry for the misunderstanding; I may have expressed myself incorrectly. If I remove the declaration of USE_FULL_SCREEN_INTENT, my app can pass the review.