DiegoM's Forum Posts

  • boulerzzz

    For some reason I get consent status "XXXXX&&true" if I try to open the consent window.

    Will be fixed in the next beta.

    Also if I give consent the status does not to OBTAINED update until the app is restarted.

    Just checked it, I forgot to get the updated consent status right after the form is closed. That's why it only works on reload. Will be fixed in the next beta.

    fredriksthlm

    I can see you use fixed versions (admob1.17 and consent2.1.10 at the moment), but I saw Ratson corrected your reported bug in consent 2.2. just fyi

    Going to wait to sort out all the issues on my side before updating :P

  • The next beta will have the ConsentStatus expression returning the new values according to the User Messaging Platform SDK.

    Also deprecated actions and conditions relating to User Personalization, because those concepts don't exist anymore.

    fredriksthlm

    You mentioned resetting the consent status, that is already part of what testing mode does. When the checkbox is ticked, the consent status is reset every time the application starts so you can see the consent form.

  • But do you really need it on the event sheet? Why? All you should care about is when the ads are shown. The plugin can decide internally if they will be shown or not, and it will be using that value to make the decision.

    Let's say you try to show an ad, but consent is still required, when you call an action to show an ad it will simply not be shown. On the other hand if consent was obtained or not required, the ad will be shown.

    There really is no need to expose the value, if the plugin is already making the choice of showing or not showing the ads based on it.

  • Working on this, it is more annoying than it seems.

    Just a heads up. I have been considering removing the ConsentStatus expression altogether, because as it stands, it is no longer needed from the perspective of Construct anymore.

    The plugin uses the value internally to decide whether to show the consent form on startup or not, after that there is nothing else to do with it.

    From what I understand, apps should always have an option for the user to review the consent given, so that option should always be visible, regardless of the current consent status.

    I did find a little bug in the cordova plugin we are using, that was tripping me up, so any changes will have to wait until that is fixed. It's a very small issue and from what I can see the plugin development is quite active, so I wouldn't worry too much about that.

  • ciko

    The only actions and conditions that have been deprecated are the ones regarding Video ads, which have been replaced by the new Rewarded Ads.

    The deprecated actions and conditions still exist, but it is no longer possible to create new ones.

    If an existing project uses them, they will still work and behaive just as the new Rewarded Ads. If you delete an existing deprecated action or condition, you will need to replace it with the corresponding replacement.

    It is not strictly necessary to replace the deprecated events, but it is strongly recommended.

  • boulerzzz

    That is bug, it should be possible to select banner sizes. At the moment it is defaulting to Smart Banner. Will be fixed in the next beta.

    Adaptative banners are not yet implemented.

  • Thanks for pointing it out, will be fixed for the next beta.

  • As of r254 the Mobile Adverts plugin has been updated to support Admob SDK version 20.0.0 and up, as well as the new EU consent form and IDFA messages (iOS only).

    The plugin still works largely the same, but there are some new features and a few other things that have been removed or deprecated. So let's go over them now.

    Deprecations

    Plugin properties

    • Publisher id: is no longer needed to be specified explicitly as it is inferred from the application ids.
    • Ad free option: this is no longer an option supported by Admob SDK, so it is being removed from the plugin.
    • Privacy policy url: although this plugin property is no longer needed, you still need a privacy policy when setting up the EU consent form, more on that later.

    Features

    • Video adverts: everything related to video adverts has been deprecated as whether or not an advert is a video is decided only by the configuration of ad units in your Admob account, rather than by explicitly requesting for a video.

    On track for deprecation

    • Set user personalization: it is no longer possible to change this setting at the SDK level. Whether ads are personalised or not is decided by the user giving or declining consent. You can still use this action using the "No Adverts" option, which will effectively turn off ads. It is likely this action will be deprecated in the future.

    New features

    • Rewarded advert: this type of ad replaces the old video adverts.
    • Rewarded interstitial advert: previously unsupported ad type.

    EU consent and IDFA

    A few things are needed to setup EU consent forms and IDFA messages (iOS only), so let's go over the whole process.

    Funding Choices Account

    In order to set up an EU consent form and IDFA messages (iOS only), you will need to create an account at https://fundingchoices.google.com/ which is linked to your existing Admob account. To do so, follow this steps:

    1. Login to your Admob account.
    2. Click on Privacy & messaging in the left hand side menu.
    3. Click on the Go To Funding Choices button.
    4. Follow the steps to create your new account.

    After doing that, your new account will already have knowledge of applications created in your Admob account and you will be able to create EU consent forms and IDFA messages (iOS only) for them.

    Creating Messages

    Now that the funding choices account is setup, you need to create a message, to do so follow these steps:

    Select application

    Select one of your applications by clicking on the Apps option of the left hand menu and then by clicking on the application you want to create the message for.

    Fill consent details

    Now click on the Consent Details button, to set up what the form will be requesting from the user.

    There are a few details to complete here:

    • Consent framework: pick the only option available.
    • Purposes for your own use: pick the permissions necessary for showing ads.
    • Privacy policy URL: enter your privacy policy URL here.
    • Vendors associated with your app: you can pick which vendors your app will use for adverts. You can just tick the Commonly used vendors checkbox here.

    Hit Save and let's continue.

    Create message

    Click the Create button to create a message. In the case of Android there will be a single option here to create a EU consent message. In the case of iOS there is also the option to create an IDFA message. In iOS you will need to create both messages.

    Now follow the steps to complete the message, first you will setup the name of the message, the languages it will support and the consent options the form will have. Won't go into much detail here as it is fairly straight forward.

    Then you are given the option to style the form to better suit the style of your application. The styling options are pretty limited though.

    Once you are done, save everything and your message will be created!

    Make sure to publish the message so your application can start using it. Do so by clicking on the three dots menu on the message entry and selecting Publish.

    With all of that setup, everything should be ready to start showing ads!

    Known issues

    During development we haven't been able to get iOS apps to show ads, we are still trying to figure out why. Hopefully it will be sorted out quickly.

    Update r256

    Deprecations

    Features

    • Set user personalization: this action will not do anything when used, so it is advised you remove it if it was in use.
    • On User personalization updated: this condition is no longer fulfilled

    Changes

    • Consent status: this expression now returns different values. It now returns any of the following: REQUIRED, NOT_REQUIRED, OBTAINED or UNKNOWN

    Update r257

    Deprecations

    Plugin properties

    • Show Consent: was removed because the desicion of showing the consent dialog is now made automatically using information provided by the User Messaging Platform SDK.

    Update r258

    Additions

    Plugin properties

    • Show on start up: A toogle to choose wether to show the consent form automatically on start up.

    Caveats

    The following only applies for iOS devices.

    IDFA Message

    If you have an IDFA message set up in your Funding Choices account and the application is opened by a device in the EEA, the ATT dialog will be shown immediately after the EU consent form. This is how the underlying SDK works and it is mentioned in Google's own quick start guide.

    However, if you disable your IDFA message or don't have one at all, then the ATT dialog won't be shown automatically and you will be able to control when it appears by using the Request IDFA action.

    Spoof Location in real device

    Unfortunately at the moment it is not possible to use this feature in a real device with iOS version 14 or greater. This is because to enable the feature, it is necessary to have access to the IDFA beforehand, which is not possible without first showing the ATT dialog. Since the dialog can only be shown one time, enabling the feature makes it impossible to later test how the application would behave upon first installing it. The feature can still be used in a simulator though.

    Update r260

    As of r260 all of this changes are in the stable release. The documentation for the plugin has been updated.

    construct.net/en/make-games/manuals/construct-3/plugin-reference/mobile-advert

  • The changes to the plugin itself involve a few properties that have been removed and a few actions and conditions being deprecated because they don't make sense anymore. It's still used largely in the same way, so if you are setting it up now you can still follow that tutorial. You might need to change a few things, or maybe not depending on what you do.

    The other big change is how the user consent form works. Now you need to setup another account in https://fundingchoices.google.com. This is asides from your Admob account. It is not difficult at all and can be done directly from the Admob account, but it is an extra step that wasn't needed before.

    I'll go into more detail once the next beta release is out.

  • Starting with the next beta r254, the mobile adverts plugin will support Admob SDK 20.0.0 and higher. The update also includes the new user consent forms.

    There will be more information about this next week, particularly around changes to the plugin and instructions on how to get the user consent form up and running.

  • Ok, I fixed a few problems with that file structure.

    The first was that the JSON files were malformed, there was a missing curly brace, sorry about that, you copied from my post and I missed it.

    On the same vein, comments are not valid JSON syntax, so a JSON with line comments or block comments won't be parsed correctly, that was my fault. I assumed you knew that and just wrote it in my post as an example.

    I also noticed that you named the files c3-import-setting.json, it should have been c3-import-settings.json with and "s".

    Lastly, I changed the folder with 2 sprite sheets so that each one would be picked up as a different animation. What I did was put each of the files inside a zip file. That way and with the configuration file, C3 understands those files should be treated as spritesheets.

    To summarize that last part, the importer will only interpret an image as a spritesheet if:

    1. It is the only image in a folder or zip.
    2. It can find a configuration for it (on the same folder or somewhere up the hierarchy)

    Another important bit, is that content extracted from a zip file, will not create a sub folder. That means that if you want to import a folder with multiple animations at it's root, you need each animation to be inside a zip.

    Here is the updated file.

    dropbox.com/s/bv5lm4qrbjzb4my/FULL.zip

    I think your application is going to need to be able to create zip files in order to take full advantage of C3's importer. I'm sure JSZip can handle that no problem.

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • I see the problem with the duplicate folder names, should be an easy fix.

    It's possible to add additional options to the configuration file, but first I would like to sort out issues in the basic use case.

    Can you share the files you are trying to import? The whole folder structure, so I can try it out.

    Have you tried creating the configuration file for the sprite strips? If there isn't one when a single image file is found, it will be imported as a single image. If you want a single image to be interpreted as a strip, place a configuration file next to it in the folder structure.

    The file should be named c3-import-settings.json and look like this:

    {
    	"import-mode": "spritesheet", // set to "spritesheet" so the single image is treated as such
    	
    	"spritesheet": {
    		"horizontal-cells": 4, // amount of horizontal slices
    		"vertical-cells": 4, // amount of vertical slices
    		"direction": "horizontal" // how the resulting cells will be added to the animation, either "horizontal" or "vertical"
    	}
    }
    

    "horizontal-cells" and "vertical-cells" indicate how the sprite sheet should be sliced up in order to generate frames out of it.

    "direction" is how the frames will be added to the animation. "horizontal" means looking at the frames one row at a time and moving down, while "vertical" means looking at the frames one column at a time while moving to the left.

    If all your sprite sheets are the same, you can just place a single configuration file at the root, and it will be applied to all files that need it. If you have different sized sprite sheets, each one will need it's own configuration file placed next to it in the folder structure.

  • eleanorjmorel

    It sounds like it should be possible.

    If you haven't already, you should try importing some folders and zip files manually into the Animations Editor, that way you will get a feel of what the results are going to be. That will help in making clear what your application should produce.

    There is a subtle difference between importing folders and zip files, which is not too difficult to understand once you try it out yourself, but when explained through text it can get confusing and might seem more complex than it actually is.

    As for your problem with reading the json content, this snippet should do it

    	zip.file("docData.json").async("uint8array").then(function (d) {
    		const text = new TextDecoder().decode(d);
    	
    		// Print JSON as a raw string
    		console.log(text);
    		
    		// Parse string into Javascript object
    		const jsonObject = JSON.parse(text);
    	});
    

    I found in JSZip's documentation https://stuk.github.io/jszip/documentation/examples.html that you should be able to read directly as a string, but that didn't work. Fortunately, it supports reading as a typed array and you can then decode that using the TextDecoder object.

    That snippet is the most basic use case, watch out when doing asynchronous work inside a for loop, it might have unexpected results if you don't manage it properly.

  • As of r252 support for importing animations frames from zip files and folders has been implemented, and as is usually the case, there are a few things which are not immediately obvious about the feature. So let's talk about that.

    Let's start with the basic use cases.

    Basics

    Importing folders

    • Dragging and dropping a folder into the Animations panel, will create a new sub folder with a new animation inside of it. The animation will have frames for all images found at the root level of the folder. Both the new sub folder and the animation will have the name of the dropped folder.
    • Dragging and dropping a folder into the Frames panel or the Main drawing area will add all the individual images in the folder as frames of the current animation.

    Importing zip files

    • Dragging and dropping a zip file into the Animations panel, will create a new animation with all images found at the root level of the zip file. The animation will have the same name as the zip file.
    • Dragging and dropping a zip file into the Frames panel or the Main drawing area will add all the individual images in the zip file as frames of the current animation.

    Importing from the toolbar options

    The toolbar Load button now has two options. Load frames and Load animations.

    • Load frames allows you to pick images to be loaded as frames of the current animation. Is is now also possible to pick zip files from the file picker. All images in a zip file will be added as frames of the current animation.
    • Load animations allows you to pick images to be loaded into a new animation. Is is now also possible to pick zip files from the file picker. A new animation will be created with all of the individual images picked, while each picked zip file will correspond to a new animation being created.

    Nested content

    Folders and zip files which in turn also have folders and zip files inside of them are supported, depending on how you try to import these, this is how C3 will behave.

    • Dropping in the Animations Panel: C3 will process everything and create animations and sub folders as needed.
    • Dropping in the Frames Panel or Drawing Area: all of the nested content will be turned into a flat list and added as frames to the current animation.
    • Toolbar Load Frames option: all the nested content inside a zip file will be turned into a flat list and added to the current animation.
    • Toolbar Load Animations option: if a zip file with nested content is loaded, the images at the root level of the zip will be used to create an animation, if other zip files are found, new animations will be created for them. If a folder is found in a zip file, a sub folder with an animation inside of it will be created, following the same patters as importing a folder.

    The key points to remember are:

    • Importing folders will create a sub folder with an animation inside of it, both named after the original folder. The animation will have frames corresponding to the images found at the root level of the original folder.
    • Importing zip files will create an animation named after the zip file and will have frames corresponding to all the images found at the root level of the zip file.
    • If nested content is found, the same pattern applies. Each folder will correspond to a new sub folder with a new animation inside of it. Each zip file will correspond to a new animation.

    Optional configuration file

    Normally when importing a single file, C3 asks if the file should be treated as a sprite sheet or as a single file. In the case of importing multiple files this isn't really an option. Because of that, when importing folders or zips, even if an animation ends up having only one frame, C3 never asks how it it should be treated.

    To get around this problem, a special configuration file can be added to a folder or zip file to tell C3 how it should handle the files found on them.

    It's a simple JSON file, must be named c3-import-settings.json and should look like this:

    {
    	"import-mode": "spritesheet",
    	
    	"sort": "alphabetical",
    	
    	"order": "ascending",
    
    	"replace-existing-animation": false,
    	
    	"replace-existing-folder": false,
    
    	"use-raw-folder-names": false,
    
    	"spritesheet": {
    		"horizontal-cells": 4,
    		"vertical-cells": 4,
    		"direction": "horizontal"
    	},
    	
    	"svg": {
    		"width": 100,
    		"height": 100
    	},
    
    	"animation": {
    		"name": "optional-animation-name",
    		"speed": 5,
    		"loop": false,
    		"repeat-count": 1,
    		"repeat-to": 0,
    		"ping-pong": false,
    		"frame-durations": [1, 2, 3, 4],
    		"frame-collision-polys": [
    			{"points":[0,0,1,0,1,1,0,1]},
    			{"points":[0,0,1,0,1,1,0,1]},
    			{"points":[0,0,1,0,1,1,0,1]},
    			{"points":[0,0,1,0,1,1,0,1]}
    		],
    		"frame-image-points":[
    			[{"originX":0.5,"originY":0.5}, {"name":"Image Point 1","x":0.5,"y":0.5}],
    			[{"originX":0.5,"originY":0.5}],
    			[{"originX":0.5,"originY":0.5}],
    			[{"originX":0.5,"originY":0.5}]
    		],
    		"frame-tags":["tag-1", "tag-2", "tag-3", "tag-4"]
    	}
    }
    

    This special file can be placed at the root of a folder or zip structure and will affect all content found.

    Another file with the same name can be placed further down the hierarchy and will take precedence over the ones found before. That way you can configure different sets of files to be interpreted differently when imported.

    I think that covers everything about this new feature.

  • Don't mean to be negative... But i'll indulge myself.

    This suggestion was already made in the suggestions platform, and it was declined.

    construct3.ideas.aha.io/ideas/C3-I-1463

    Mainly because the task can already be achieved and the performance impact (if any) is negligible.

    At the end of the day, the only real benefit of this feature would be having a specialised object type with it's accompanying special icon in the project bar and event sheets.

    While aesthetically pleasing, it's not worth it from a development stand point. From the user perspective, it would just be a little extra thing that beginner's would be left scratching their heads at. There are already plenty of those as it is.