We have a pure Force.com app (no outside integration) on the AppExchange. Our customers are asking us if we can offer a way for them to load datasets into certain custom objects in our app. We will author these datasets. Each customer would want a different set of records and some would choose not to load any data at all, so we don't want to load the data in an InstallHandler script, for example. In addition, we will be adding more datasets over time, so I don't really prefer embedding them in the app (e.g. as static resources) and pushing a new version of our app with each new dataset.
Here are some of the options I'm considering (in rough order of my preference) and I'm wondering if folks have some feedback or additional ideas:
Host the data on an external site and create a page within the app to view and download datasets on demand (pros: we can update data whenever, flexibility to add/update datasets; cons: external system subject to security review, maintenance of a second system)
Create one managed package per dataset ("content pack"), where the data is embedded in a static resource. An InstallHandler installs the data. (pros: fairly simple for users, more presence on AppExchange; cons: one security review per package; multiple packages to maintain)
Create one unmanaged package per dataset, similar to #2. Since OnInstall is not available, create a new VF tab, where the user will press an "Install" button. (pros: no security review; cons: poor UX, need to distribute links to unmanaged packages on our own website)
Build datasets into core managed package and release a new package version with each new dataset. Like #1, users use a page to see and install datasets (pros: good UX once managed package is updated, continued use of "native" app means no security review issues; cons: users need to update managed package to get new datasets)