Battery optimisation

We have found that the Android Operating System sometimes kills running apps for several reasons.

One such reason is Android trying to preserve battery power. Android looks at what background processes are using high amounts of battery power and kills them if they are not used.

To help with confirming if battery preservation is the cause of the issue you’re experiencing, kindly disable Battery Optimization for the app by following the below steps. 

Once you’ve disabled battery optimisation, kindly try replicating the issue again, and let us know if it helped?

Disable Battery Optimisations

  1. Navigate to settings on your device and select “Apps”.
  2. On the apps page, navigate to the FormsFly app or your White Label App, and click on it. You will now see the App Info screen. Now click on the Battery option.
  3. Here you will be presented with three options. Initially, Optimised will be the currently selected option, but we want to change this to Unrestricted.

 

Hopefully, this will prevent Android from killing the app while it is still in use.

The App is crashing, what can I do?

App crashes are annoying and we work really hard to do what we can to avoid them happening in FormsFly.  But every app crashes sometimes so it’s important to understand a little but about why and what to do if it happens to you.  Most of this advice applies as much to other apps on your device as it does to FormsFly.  Continue reading

Generating an Android Bug Report

This article is to help you generate the Android bug report to help us further investigate the issue that you have reported.

Please generate the bug report immediately after encountering the issue and note the date/time when the problem occurred, as this will assist us in accurately identifying the relevant event in the generated log.

Enable Device Developer Mode

On the device in question:

  1. Go to “Settings”, then tap “About device” or “About phone”.
  2. Scroll down, then tap “Build number” seven times.
    Depending on your device and operating system, you may need to tap “Software Information”, and then tap “Build Number” seven times.
  3. Enter your pattern, PIN or password to enable the “Developer Options” menu.
  4. The “Developer Options” menu will now appear in your Settings menu.
    Depending on your device, it may appear under Settings > General > Developer options.

 

Generate Bug Report

The report needs to be generated. After developer mode has been enabled, you can stay in developer options as this is where the function is to generate the bug report.

As seen in the screenshot (left) below, the second option is Bug Report. Click that option to generate the bug report. A popup will be shown, similar to the screenshot (right) below.

Make sure to select Full Report and then click the report button. This might take a few minutes and may differ from device to device, so please be patient while the report is generated.

A notification will be displayed on the device as soon as the report has been successfully generated.

Share Report

Now that the report has been generated, it is time to share it with us. To do that, click on the notification. This will show the default share options. There are different options, we suggest uploading it to Google Drive in a folder that can be shared with us. We suggest this because the size of the report can differ each time, and emails have a size limit for attachments. If the file is too big, there will be no attachment, and we will not be able to access that report again as it is saved in the root folder of the device that you do not have access to.

After the Report has been uploaded to Google Drive, please share that folder with us so our developers can have a look at the report. 

That is it. Please let us know if you have any questions or concerns.

FormsFly app best practices

When a form entry is completed, the answer values are prioritised and uploaded first.

The size of the answers are also generally quite small and thus upload fast, even on slow network connections.

However media files such as photos, audio and video are each much larger in size and thus take longer to upload. 

Video files are generally the largest files (and thus take the longest to upload), with audio and photos usually being smaller but still significant in size – e.g. in the region of 500 kilobytes.

Mobile devices also do not allow apps to run for long in the background before either killing or sleeping the apps.

This is because power conservation is a key aspect of a mobile operating system – the less apps running, the less battery life consumed.

So generally when the app is in the background or closed, your media file uploads may not have sufficient time to complete before the app is stopped.

In this case, the files will remain on the device waiting for the next time the app is opened before these can continue uploading.

Additionally if the app is forcibly closed by the user – e.g. by swiping the app off of the “open apps” view in iOS or Android – then the mobile operating system will kill the app, which in turn stops any background uploads the app was running.

 

What app users can do to ensure uploads are completed

When finished using the app, your users should not kill it – rather they should simply push the app to the background.

This is easily done by either switching to another app or by hitting the home button on the device.

Users should not swipe the app off the “open apps” view of their device, rather just they should leave it in the apps list even when not in use.

If uploads are slow or not successfully uploaded, mobile users can help by keeping the app open and “awake” in the foreground, or by re-opening the app when they are next on a faster network connection (e.g. an office Wi-fi connection).
This should assist the app with having more time to upload outstanding files.

How to control size or resolution of images in Forms.

Photos or images that are captured via Media fields in your Form will be automatically resized to a maximum height/width of 800 pixels.

This default ensures that captured images do not consume large amounts of the user’s mobile data during uploads, and maintains reasonable quality for printing and PDF outputs.

If you wish to change this default behaviour, you can do so at the individual Form level via the “RESIZE IMAGES TO” designer setting.

On the FormsFly Platform, browse to your Form design.

Click on the title bar of your Form preview to access this option.

Change the RESIZE IMAGES TO option as desired.  Remember that every 1000 pixels increases image file size by a factor of 4.

After setting the desired resize pixels, be sure to save your changes!

IMPORTANT NOTE:
Resizing to over 2000 pixels has been known to cause device/app stability issues especially with some Android devices due to the very large file size of images of this higher quality.

Increasing image quality in PDF and other outputs

When exporting a Form entry (through our Data Entries area on the web portal), you will notice we provide a “High Resolutions Images” checkbox.
Selecting this option will lift increase the image sizes in the PDF, from our default of 96ppi to 150ppi (pixels per inch).

This same “High Resolution Images” option is available on Form connectors:

By default, images are output at a resolution of 96ppi (pixels per inch).
This makes the generated size of output files smaller and thus faster to transfer.
Selecting this option increases image resolution to 150ppi, boosting picture quality at the cost of much larger output file size.

GDPR Security Improvements

Changes coming soon.

Security Improvements

New Password Policy Options

The platform has to date enforced a simple 6 character minimum length password, with a focus on making it easy for users to get started with our service. We’re adding a Password Policy drop-down to the Organisation Setup page which gives you more control over user password requirements. Aside from our default Basic policy, there will be two further options based on current best practice recommendations:

  • NIST SP 800-63
    A phrase-based policy based on the latest recommendations of NIST, which encourages human-friendly passwords that are still hard to crack.
  • OWASP 2017
    A strict policy which favours complex passwords that are hard to crack but also harder for people to remember.

Both of these new policy options will add stronger password security requirements for your user accounts, so consider what is best for you.
For now, our platform will continue to set our Basic 6 character minimum policy as the default on new company accounts, but you can change this at any time. When you change the Password Policy, this will be applied to existing users when they next change their passwords.

Maximum Password Attempts Lockout

We’re adding a temporary lockout feature to user accounts which will be applied when an incorrect password is attempted more than 5 times in a row.  This is based on NIST recommendations and provides better security against brute force password attacks.  For now, this will apply to our web platform, but we’ll be extending this behaviour to app logins within the next few months.

Validation of Passwords Against 10,000 Most Common

We’ve loaded up the 10,000 most common passwords – as found by NIST linked security researchers – and will be blocking users from setting/updating their passwords to be any of these. This enforces NIST and OWASP guidance on preventing users from having easily crackable passwords.

Regenerable Integration API Keys 

When working with our API there has been only one secret Key value per company account, and this Key value was fixed at the date of account creation. We’re adding a second Key which works just the same as the existing one, thus allowing you to rotate between using Key 1 and 2 in your integrations. This also unlocks the ability to regenerate an unused Key at any time, thus enabling you to enact greater security procedures (i.e. key rotation/regeneration) when using our API.

 

New Personal Data Options

We wanted to make it easier for you to export data out of our platform while still being able to meet obligations you may have around personal data. Basic user account information like name and email is also considered to be personal data by default.
For other data that you control, we’re adding a new “Is Personal Data” checkbox into key areas of the platform including Forms, Data Sources and Connectors.

This new checkbox allows you to indicate that a field or column may contain personal/sensitive data.  In of itself, this option does not add any further security or protection, but it enables the platform to offer anonymisation of those data values when exporting.
You’ll notice this through new “Anonymise Personal Data” options that will appear on most system exports and Form Connectors when the presence of personal data has been indicated.

For API users, we adding a new set of “Anonymise” Keys.  These work the same as our existing Full Access keys, with the difference being that any responses to requests authenticated on Anonymise keys will result in personal data values being converted to non-human readable formats.

 

 

Filter what users see on the app/platform

Here is the current rule of thumb when it comes to restricting visibility/access to content across the platform:

  • Access Permissions control the user’s visible areas and abilities on the Platform 
  • User Groups and Folders control what specific Screens and other content the user sees on the Platform and app
  • Formula filters can control what the user sees within a specific Screen on the app

Restricting Control Levels and Access to Areas of the Platform

If you want to give users limited access to parts of the Platform, you can do this via the Access Permissions section found on the Edit User page.

Simply head to Menu -> Users -> roll over a user in the listing and hit “edit user”.

Choose the access level and specific areas that the user will be permitted.

Access levels control what the user can do

  • Read Only access level provides viewing only power to the user
  • Read/Write allows the user to modify content and allows them to access most functionality
  • Administrator users have full control over all aspects of the system.
    They are also the only user level that have access to administrative areas of the platform menu such as Organisation Setup, Users etc.

Access areas control the Platform areas/features that the user is permitted to see.

Simply unselect the areas you want to keep the user out of.
e.g. unselect the App Builder area to remove that option from their navigation menus when they log into the platform .

Restricting Access to Screens and Docs

Restrict Access by Folder

If you want to show different sets of Screens to different sets of users – e.g. let managers see additional Screens – then you should create Folders and assign the relevant Screens and Docs to these.

Generally these Folders should be modelled on the specific role or other app user groupings you wish to control, and you need to make sure the relevant users have been given access to the respective Folders.

You can turn on access restrictions on a per Folder basis, granting access to the Folder by user group and/or on a per user basis.

For more information on how Folders work, refer to the Folders section of this support website.

Manage Access Easier with User Groups

User groups make it easier to manage large numbers of users, by create groups to represent the various units/departments in your company account.
This approach ensures that you don’t have issues such as different departments seeing and/or modifying content that belongs to other departments.

  1. Create new user groups via the Menu -> User Groups page.
  2. Once you have created Groups, assign users to the relevant Groups via the Edit User Group page.
  3. You can then assign these Groups to specific Folders via the Folder Settings popup, which is accessible via the little “cog” icon found next to each Folder name in the Screens, Docs and Data Sources listing pages.

Restricting Screen Access/Visibility on the App

If you employ Folders as mentioned above, then your users will only see what you grant them access to.

Another option is to create your own custom app start screen.

You can do this by using the “Start Screen” option found on the App Builder -> App Setup page.

If you create a custom Icon Board screen for example, you can then apply visibility formulae to dynamically show/hide the respective icons of that Screen.

Filter Data Rows Prior to Being Sent to the App

If you need to show restrict data rows seen by the user based on complex business rules, then you should consider the following options.

Run a Hosted GET Web Service

One way to do this is to host the rows of the Data Source on your own server and use our Hosted GET connector option on the Data Source in question.

This means that your Hosted GET web service will have the ability to apply user-specific filtering on the data when the app requests the rows.

Hosted GET gives you maximum flexibility to apply whatever business rules you need, but it does require software developer skills to create the web service.
For more information, take a look at our Hosted GET documentation available on this platform.

 

Filter Data Rows Dynamically On the App

Another way to control visibility of data and Screens is by using our powerful formula engine functionality, which is available where-ever you see the little “hammer” icon in Screen designers.

You can leverage our formula functionality to filter and show/hide items in the following ways:

Apply “In-Screen” Filtering

Depending on the Screen in question, you can also apply app-side dynamic filters to Data Source rows by using our formula engine.

For example on a Form screen, you can specify a filter formula on Choices and Data Source type fields.
Similarly filters can be specified as parameters when opening Listing and Mapping screen types.

Leveraging User Metadata

User Metadata is a set of key/values that you can define on each user (via the Menu -> Users -> Edit User page or through the User API).

So you can setup user-specific data as needed, and then refer to these in a filtering formula via the USERMETA() formula function.

For example, you could add the employee’s group/role code as metadata, and then filter rows where the role/group column equals the user’s metadata value.

Apply Cross-Screen Context with Global Values

Global Values are device specific key/values that you can assign/set through a Form Screen, using the “Bind to Global Value” property available on most field types.

This allows you to get and set a value, accessing it by a key name of your choosing.

You can also refer to global values in any filter formula via the GLOBALVAL() function.

Global Values are a great way to have the user set a “context” for their app session, with that context selection then being available to any Screen’s formula areas.

Consider this example:

  1. Have the user select their current job/project context (which is bound to a Global Value) via a simple Form.
    The Form should be configured to NOT upload on completion, thus saving many meaningless Form entry submissions.
    You can configure this “no upload” behaviour via the “Do Not Upload Data” option found on the Settings page of every Form Screen.
  2. Design your other app screens to apply filtering and visibility formulae by referring to the saved user context via the GLOBALVAL() function.
    This way the context the user chooses will “follow” them through the other app screens they see and use.

Screens, Docs aren’t on my device anymore.

Folders with user access restrictions are useful for situations where different groups/teams are using the same app, but need to see different screens/docs when they log in.

The platform allows various levels of Screen or Document access or viewing.

a.  You want to keep your Folders for organising Screens, but don’t want to enforce user security.

For this case, turn off User Access Restrictions on the Folder(s) preventing your users from accessing the Screen/Doc in question.

  1. Go to the Screens or Docs page on the platform.
  2. One at a time, click on each Folder name that has a “lock” next to it and note how the Screen/Doc results change.
    You are looking for a Folder which contains your target Screen/Doc, so it should still appear in the page results after filtering.
  3. Once you find a locked Folder containing the Screen/Doc, click on the “lock” icon next to the Folder name.
    In the Folder Settings dialog, untick the “Restrict User Access” checkbox and save changes.
  4. Repeat for all other “locked” Folders as desired.

b. You want to gain Screen access while continuing to enforce user security on the existing Folders

Either add your desired Screens/Docs into a folder that your user has access to, or add a new Folder with no user restrictions and assign your Screen/Doc to that new Folder.

To add a Screen/Doc to a Folder:

  1. Go to the Screens/Docs page (Apps -> Screens/Docs)
  2. Tick the checkboxes next to the desired Screens/Docs listed in the All folder
  3. Click the Organise button to assign your selections to the folder
  4. Click the “+” icons next to the chosen folders to assign folders to your Screen/Doc selections.

Once you have done this, ensure that the Folder in question has the “Restrict User Access” checkbox turned off.

Otherwise give your user access to the Folder:

  1. Go to Apps -> Screens, and hover over the folder name on the right hand side
  2. A little “lock” icon is on each folder; click on this icon to open the Folder Settings
  3. In the “Assign to Users” field, chose the users that you wish to have access to the folder.
    Doing this will give them access to all Screens and Docs contained in the folder.
  4. Click the “Save” button to save your changes.

c. You don’t want/need Folders at all.

Remove all folders – this will switch the system back into “open access”, meaning all Screens/Docs are visible by all users.

  1. To do so, go to Apps-> Screens, and hover over the folder name on the right hand side
  2. A little “lock” icon is on each folder; click on this icon to open the Folder Settings
  3. In the Folder Settings popup, click the Delete button.
    Don’t worry, your Screens/Docs in that folder are safe – deleting a Folder has no effect on its contents

 

After removing all folders using the steps above, you should now see all Screens and Docs on your device again.

Troubleshooting the app

Sometimes a form, job history or another item will seem like it’s stuck. This can be for many reasons.

  • No data connection
  • Incorrectly logged in
  • Logged in as someone else
  • Wrong information
  • User hasn’t synced with the platform

 

The last one is the major reason for the majority of failed uploads, this in itself has many reasons, the majority of which can be fixed by the following steps.

 

An indication of this is checking the user’s phone activity on the platform. Many times if a user cannot sync, the activity says the user has not synced for a number of days.

ss-2016-11-15-at-11-15-53

 

NOTE: If there are pending uploads or data still on forms waiting to sync, then under no circumstance is the FormsFly app to be uninstalled.

If the FormsFly app is uninstalled and reinstalled then all data will be lost. There is nothing we can do to recover this after a reinstall.

 

  1. Either make sure the phone power is sufficient or plug into a power source.
  2. Confirm that the phone is connected to a good reliable data connection, either mobile data or Wi-Fi.
  3. Check phone OS. Update if available
  4. Check FormsFly App. Update if available.
  5. Confirm email/login credentials for App.
  6. Reboot phone.
  7. Open the FormsFly app
  8. Check data connection
  9. Login to app
  10. Go to settings
  11. Sync app