约翰,
好吧,听起来您还有一些工作要做!当您有一个现有的基于 Web 的应用程序时,有两种基本方法可以让您的应用程序在任何特定设备上可用:您可以 (1) 编写一个本机应用程序,为您想要支持的每个设备实现您想要的功能,或者您可以(2) 为您现有的应用程序编写一个基于 Web 的“包装器”,并将内容作为 HTML/CSS 提供给这些相同的设备。
选项 1:为您想要支持的每个平台构建一个原生应用程序
至于第一种方法,好处可能很大。通过使用每台设备的本机框架,您拥有充分的能力和灵活性来利用每台设备的最佳功能。您的应用程序的视图也可以更快地呈现,因为您将从服务器获取的只是用于填充视图的数据(即,您根本不需要加载图像、HTML 模板或 CSS 文件)。
这种方法的缺点是它本质上要求每个设备都有自己的应用程序。因此,如果您支持 Web 应用程序、iPhone 应用程序、Android 应用程序和 Blackberry 应用程序,这意味着您需要维护 4 个完全独立的代码库。如果您向 Web 应用程序添加某种新功能(您可能会在某个时候添加),您还必须在其他三个单独的代码库中实现该新功能。鉴于这些设备可以具有不同的交互模型,这可能会带来挑战。这里的另一个缺点可能是分发(即,您可能必须通过审核过程来查看 iPhone 应用商店之类的东西,具体取决于您希望如何分发您的应用程序)。
选项 2:为您的应用编写基于 Web 的“包装器”(可能使用库)
这种方法也有很多好处。首先,如果您使用像PhoneGap或Sencha Touch或Rhomobile这样的框架,最大的好处是理论上您只需编写一次“移动应用程序”代码,它就可以在框架支持的每个设备上运行。与为三个平台编写本机应用程序相比,这要少得多。
这里的缺点如下。这种方法在设备的浏览器中作为网站运行,因此您将无法访问每台设备的所有功能。根据定义,iOS 和 Android API 中的所有好东西都对你不可用。您在本地存储方面也受到一定限制,但考虑到您的 Web 应用程序,这对您来说可能不是一个大问题。另一个缺点是,这种方式需要服务器提供更多带宽,因为您正在提供所有 HTML、图像和 CSS,否则您将不必使用本机应用程序。根据用户数量和页面的复杂性,这对您来说可能很重要,也可能不重要。这里的另一个缺点是您不能全屏显示(例如,在 Mobile Safari 中的 iPhone 底部总是有一个工具栏)。
一般问题
阅读您的问题与我有关的一件事是您的要求清单。复制功能和连接到远程数据存储是您绝对可以使用本机和基于 Web 的移动应用程序完成的事情。但是“保留[ing]拖放功能”不是。例如,对于 iPhone,您可以使用 UITableViewCell 中的句柄来提供重新排序列表的方法,但完全拖放并不适合移动设备的用户交互模型。您可能需要重新考虑这一点。
“提供与 Web 应用程序相当或更好的丰富用户体验”的要求也有点令人不安。虽然基于手机的应用程序可以真正简化获取和操作数据的方式,但请记住,您正在为几英寸见方的屏幕进行设计。以一种有条理的方式提供与使用 21 英寸高清宽屏显示器相同的信息广度实际上是不可能的。
请记住,您在这里是为移动设备设计的,因此您希望利用可用的平台,但请记住您正在处理小屏幕和有限的交互方法(触摸、滑动和手势)。
我的建议是,如果这是您第一次这样做,您想支持所有这些设备,并且您已经有网络经验,我建议您选择选项 2 并使用上述框架之一。这将是最简单的开始方式,并且不会有任何完全不同的概念供您学习。
祝你好运!