Skip to main content

Privacy policy, play store and godot

Update: Fixing godot games published in google play | godot official blog

Recently my stupidgameaboutconnectingcoloredlines was removed from Google Play because, as the kindly mail I receive stated, it violates play store's "personal and sensitive information policy". If you are a member of the godot facebook page, you probably have seen that this had happen to many developers already.

If you use any version prior to godot 2.1.5 or godot 3.0.x your app will be removed even if your app doesn't collect any data (as in my case), that's because godot use placeholder1s within AndroidManifest.xml which can be potentially detected as permissions. There are differente approaches currently being discussed2 to fix this problem.

So if you find yourself in this situation there are at least three solutions to the problem, use the more convenient one.

Generate a privacy policy

This is the solution many have used. You have to link to your privacy policy directly from your app Play listing, you can place it in your personal webpage or any other accessible url.

There are several privacy policy generators, as an example:

Many have opted to only link that privacy policy in the google Play listing and the app have been reaccepted, but reading through google's policy that shouldn't be enough as that privacy policy should be included in you app as well.3

Use Apktool

Apktool is tool for reverse enigneering android apk files.

In this case you need android-sdk and apktool installed.

  1. Export your app through godot.
  2. Decode your app with apktool4

    sh apktool decode your_app.apk

  3. Go to the new created folder and modify AndroidManifest.xml removing any unused permissions.

  4. Build your app again with apktool5.

    sh apktool build your_app your_app_unaligned_unsigned.apk

  5. Align and sign your app before submitting again.6

    sh cd your_app/dist zipalign -v -p 4 your_app_unaligned_unsigned.apk your_app_unsigned.apk apksigner sign --ks your_key.keystore --out your_app.apk your_app_unsigned.apk

  6. Release the new version and under store listing in the play console you should resubmit your app.

Compile the templates

This is probably the least straight forward approach.

You need to compile the android templates, but modifying godot/platform/android/AndroidManifest.xml and deleting the unused permissions before compiling the templates.

I will not go into the details on how to compile templates as you can check the documentation on building export templates.


Ignore mouse & stop mouse

In each control type node there are two properties quite interesting when dealing with overlapping objects that handle input events.

A typical case scenario is when some control is not receiving events, in that case you should check that this two properties are set correctly in regards to the expected behaviour. Take into account that in godot the tree hierarchy works placing the object from bottom to top, meaning that the last object in the scene tree will be the last drawn or placed, and will overlap other objects.

Ignore mouse or focus\ignore_mouse

By default set to false.

If set to true It will ignore the mouse and pointer events (input_event) for the node in question, meaning that the node will not have any interaction with any input_event. This only affect the node in question, neither child or parent nodes.

For example, if you are using a button node with a signal when the button is pressed(), and ignore is set to true that node will not receive any event and as a result the signal will not be triggered.

Consequently any other node under that control node will receive the signals.

Stop mouse or focus\stop_mouse

By default set to true.

If set to true any parent node will not receive any event, meaning that every input_event will be absorbed by that node.

Three things to take into account:

  • This does not affect to siblings, meaning that if a control overlap any sibling object this will not receive the signal no matter if stop mouse is set to true or false.
  • This only affect to the place where those controls overlap.
  • If ignore mouse is set to true, no matter how you configure stop mouse as it will not receive any event.

Behind parent or visibility/behind_parent

Another property available that influence how the events of overlapping objects are handled is the behind parent of tho CanvasItem class.

This property alter the way are placed into the scene, meaning that if set to true the node will placed behind it parents, as a result this will alter which nodes will receive the events.

Resources and further reading


Dependencies

To check the dependencies1 and the owners of a certain file (scene, script, sprite, etc.) and correct them you can right_click it within the filesystem explorer and select Edit Dependencies... or View Owners....

filesystem explorer

If you select Rename or Move..., you can move or rename the resources and godot automatically will update all the explicit owners, so you don't need to update them manually. Bear in mind that this only applies to explicit owners, for example if you point to some location within your code, you will have to update that code manually.

You can examine orphan resources (those without explicit owner) in Tools > Orphan Resource Explorer

filesystem explorer

Godot will always warn you, when you open an scene, about missing explicit dependencies.

All this is useful not only when you get errors, but when you are restructuring your code or to avoid wasting resources.


  1. A dependency being a file needed by another file. For example the script used by a node, or an image used by an Sprite node, etc. 


Display, viewport and screen resolution

Brief explanation of the differences between display viewport, viewport and screen resolution. This could be useful when you want to resize your game for different screens.

Settings display viewport

It's the base resolution for your project, the one defined in the "project settings" (scene > settings > display), and since it's a fixed value, it's the one you need to focus when creating assets and resizing elements.

Globals.get("display")

Viewport

The actual viewport size relative to the viewport defined in the settings, It's managed by the engine depending on the strecth_mode, strecth_aspect settings and the screen resolution.

As an example if you are using some stretch_mode and strecth_aspect = keep_width, the width of the viewport will be always the width value defined in the settings no matter if the actual window or screen is bigger or smaller than that value.

get_viewport_rect().size

Screen and window resolution

The screen or window resolution of the device you are running on.

OS.get_screen_size()

OS.get_window_size()

In mobile we can consider that the screen and window resolution will be equal since in most cases the engine will go fullscreen.

Resources and further reading