The Platform Sync, previously known as the Hosted GET connector lets you expose Data Source rows from your own systems, for direct access by your app.
The key advantage of the Platform Sync connector is that you can control the data rows being exposed to the app, letting you filter rows down to the individual app user level as desired. For ERP, CRM, and other enterprise systems this is important as the security/permissions around “who gets to see what” is critical.
A secondary benefit is that your data does not need to be pushed our platform, so any data sovereignty concerns you may have are resolved by this connector.
One final benefit is that Data Sources that run off of Platform Sync connectors are not subject to the standard 50,000-row limit, since the rows are delivered directly to the device.
NOTE: There are still performance limits on the app side when the rows become large - this varies across Android and IOS, and also depends heavily on the device specifications.
As a rule of thumb, performance is affected by the overall file size of the data source more than the number of rows.
For example, 5,000 rows containing say 100k of text data per row can be expected to run slower than 50,000 rows that have a total of 1k of data per row (e.g. columns containing say just numbers and a few short text strings).
Additionally, the use of “heavy” data sources in many screens that can be navigated sequentially by the user will result in a compounding performance decrease, as those big data sources can get progressively accumulated in device memory.
So with Platform Sync, you really need to test on the app to find what is the best row count and screen mix for your specific data set.
It is assumed that you have software development resources to create the web service needed by the Platform Sync connector.
If not, we can put you in contact with a consulting partner on request.
- Setting Up a GET Connector
- How the GET Connector Works
- GET Request
- GET Response
- API Usage Example
- Example Code
- Troubleshooting / Testing
Setting Up a GET Connector
For test purposes, we recommend you use a REST API development service like – https://www.mockable.io
- Create a Data Source as normal or select an existing Data Source for use.
- On the Rows page of your Data Source, manually define and organize your Data Source’s columns to match the output of your web service.
The order of the columns must match up with what your web service returns in order for any column references to work.
If you change column orders on your web service response at any stage, you will need to update the columns on the Rows page to match. - On the Settings page of your Data Source, make sure that you set the External Id field with some value for identifying this Data Source.
Remember this External Id value, since you will need it when you work through the GET web service details later in this document. -
Also on the Settings page, add a Platform Sync connector via the “Add Connector” button.
And, specify the web address of your web service endpoint in the provided Target GET URL field. -
You can also set a Global DataSource GET URL on your organization and specify that the connector uses it – this allows the reuse of the same service endpoint across multiple Data Sources.
How the Platform Sync Connector Works
When the app discovers that a Data Source has a Platform Sync connector, it performs an HTTP GET request against the target web service URL.
The GET request contains the External Ids of the Data Source’s being requested along with other identifying information.
Included in the request is are default query-string parameters, namely your account’s Private Token (useful for authenticating the request), along with the logged in-app user’s email address (useful for filtering the rows based on the user’s access).
The app will issue GETs to your service whenever it attempts a data synchronisation.
Requests are issued by the app in an itemized manner – one request per Data Source.
IMPORTANT! You MUST expose your web service endpoint as SSL secured HTTPS to ensure that app requests to your service are protected.
Attached to the bottom of this document is a C# file that outlines the request and response structures as simple classes.
Even if you are not using C#, reviewing the properties and structure in code form can be very helpful in getting started with your own Platform Sync service.
GET Request
GET requests are issued by the app to your service, passing the values below as query string parameters.
Most of the settings for the integration with your Platform Sync API can be obtained from the Organization Setup screen. This includes the Integration Key (Private Token) and Provider ID (Company ID).
The parameters passed on the request are as follows:
Param Name |
Data Type |
Required |
Description |
ids |
String |
Yes |
Comma-separated list of External Ids for each Data Source that the app wants to synchronise. |
providerId |
Integer |
Yes |
Your unique Provider Id found on your Organisation Setup page (Organisation&Users>Organisation Setup) |
integrationkey |
String |
Yes |
Your unique Private Token found on your Organisation Setup page (Organisation&Users>Organisation Setup). |
|
String |
Yes |
Email address of the logged in-app user making the request. |
deviceid | GUID | Yes | The unique identifier of this user’s device registered on our platform. Useful for tracking which device the request originated from. |
lastupdated | DateTime (YYYY-MM-DDTHH:MI:SS) |
Yes | The last time that the app checked for Data Source updates. Use this to implement incremental row updates, passing back just the new/updated and delete rows since the time the app checked in. This is recommended for large Data Sources to save server resources and prevent exhausting mobile data allocations. You can also use this value to determine whether there is anything at all to update since the last time the app pinged your service. The first time the app checks for rows, the LastUpdated value will be at least 1 year in the past. |
lastupdateds | String | No | Comma-separated list of DateTime values in the format “YYYY-MM-DDTHH:MI:SS” that represents the last time the app requested an update for the corresponding data source. The values are listed in the same order as the external ids in the Ids parameter. Each date in the list represents the last time that the app checked for Data Source updates for the specific data source. Use this to implement incremental row updates, passing back just the new/updated and delete rows since the time the app checked in. This is recommended for large Data Sources to save server resources and prevent exhausting mobile data allocations. You can also use these values to determine whether there is anything at all to update since the last time the app pinged your service. If nothing has changed for the related data sources, then you can simply return a response with no DataSources property defined. The first time the app checks for rows for a specific data source, the related last updated value will be left blank in its position in the comma-separated list. We suggest that you return the full set of data in the Rows property of your response in this case. |
GET Response
IMPORTANT! Your web service MUST return a response in the following structure. Failure to comply with this format will result in failure to download rows on your app. Your response MUST be in JSON format.
We also support gzip and deflate compression on responses.
This is recommended for large data sets since text data compresses very well and thus will conserve mobile data allocations and massively reduce download time.
Our support for compression is identified through the “Accept-Encoding” header being set by the app on its REST requests.
Your web service/server should encode the entire response stream using gzip or deflate, which will then be recognised by our app code.
This is usually an automatic behaviour at the webserver level, though you should check that your server configuration has enabled compression for JSON content.
In terms of how to apply response encoding, this is beyond our support scope – you’ll need to confirm this with your software developers.
If you are using Microsoft IIS as your web server, then this article may help in terms of checking your compression settings.
This service may also help with identifying if your server response is indeed being compressed.
Rows Response (<DRowsResponse>)
<table cellpadding="0" cellspacing="0" class="t1" style="b