Use Case

I want to users to be able to use a specific version of an app with each app being able to have many available versions. I also want developers to be able to add, remove and manage app versions but still have metadata like app description, name, icon and summary be the same across all versions.

Examples

  1. An app named “My Web App” allows users to access a different web endpoint based on the user which version of the app is selected.
  2. An app named “My File Based App” allows users to download a specific version of the app.

Implementation Strategy

A multi-version app can be represented simply by maintaining a structure of custom JSON within a single app’s customData object. For example:

{
	"appId": "abc"
	"name": "My File Based App",
	"developerId": "123",
	"customData": {
		"summary": "A quick summary",
		"description": "An <strong>HTML</strong> description of the app",
		"icon": "//cdn.openchannel.io/some-icon.jpg",
		"versions": [
			{
				"version": "2.1",
				"file": "https://myapp.com/myfile-2-1.exe"
				"otherData": "..."
			},
			{
				"version": "3.0",
				"file": "https://myapp.com/2/myfile-3-0.exe"
				"otherData": "..."
			}
		]
	}
}

This implementation has the following characteristics:

  • All metadata common throughout the app lives in the top level of customData while version specific data lives within the versions array.
  • An app developer’s ability to update the customData.versions array (along with validation like duplicate version detection) is implemented solely within your developer UI for app editing/ management.
  • A user can choose from different versions to implement but ownership (install/uninstall) is still recorder on a per app basis.
  • A user can own an app and select from any available version
  • A developer can update and manage their app’s versions