为现有的Rails应用程序创建iPhone和Android应用程序

15

我刚刚花费了很多时间研究如何最好地为我已经构建的现有Rails应用程序创建iPhone和Android应用程序,但我感觉实际上并没有更接近于知道如何最好地实现这一点。

我的要求:

  • 我希望将Rails应用程序和移动端代码清晰分离。我不希望只是在我的Rails应用程序中呈现不同的布局。我更喜欢使用像PhoneGap这样的东西,它可以让我使用大致相同的代码库运行移动应用程序。
  • 我想在移动应用程序中具有脱机/同步功能(因此,如果用户在不可连接网络的情况下在其iPhone上创建记录,则该应用程序应将该记录保存在手机上,并继续尝试将该记录与Web应用程序同步,直到成功)。
  • 日后需要访问硬件功能。GPS、加速度计等。

我的问题:

  • 这是使用OAuth的好情况吗?我是否应该在我的Web应用程序中构建OAuth提供程序,然后将两个移动应用程序构建为Web应用程序的客户端?
  • 我是否遗漏了更简单的安全授权方法?
  • Devise是否与OAuth兼容?我的应用程序目前是基于Devise构建的。
  • 这种同步是否应该抽象为中间件或metal?

抱歉,我知道这实际上是很多问题,但我希望熟悉情况的人综合回答,而不是留下更多问题的几个小提示。我觉得这现在必须是一个常见的情况,但我似乎在搜索中没有找到最新的信息。

干杯!

PS-如果您自己做过类似的事情并知道如何实现,请直接与我联系。我甚至会请你喝啤酒。说真的...没有人愿意?


Erskingardner,当你有多个问题时,应该创建多个问题,这样每个问题都可以有一个独立的答案集,对其他人来说也是可搜索和有用的。 - edgerunner
3个回答

4
我正在构建一款移动应用程序,使用Grails后端,必须支持Android和iPhone。
到目前为止,我已经进行了几次迭代,试图确定技术方案,包括原生Objective-C、原生Android、PhoneGap和Titanium Appcelerator。
对于身份验证,我使用基本认证的HTTPS。我知道人们对基本认证有所担忧,但这个问题存在争议,请参见此StackOverflow问题
我还没有解决同步问题,但最初不指望实现那么复杂的解决方案,会将内容(XML或JSON)存储在本地,并按需推送回服务器。内容在本地以与发布到服务器时相同的格式存储。
后端采用Grails,所有REST API调用都在每个请求上进行记录和身份验证。可能会添加额外的安全性,只允许特定注册设备访问API作为额外的安全级别。

太对了,谢谢你的解释,亚伦。总是很好听到在这种事情上有许多不同的观点。 - erskingardner

3
我一直在使用Rails后端构建iPhone应用程序。由于浏览器解决方案中没有完整的核心位置框架,我一直在使用Objective-C。因此,如果您想使用设备的全部功能,则必须使用本机开发环境。
我一直在使用Objective Resource http://iphoneonrails.com/,这是一个开源框架,为Objective C NSObject类提供类似Active Resource的扩展,并与我的Rails应用程序非常兼容。您只需要像下面的示例那样在控制器操作中放入渲染JSON或XML即可。
 class UsersController < ApplicationController
 # GET /users
 # GET /users.xml
 def index
   @users = User.all

  respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @users }
  format.json  { render :json => @users }
end

结束

我不知道这是否回答了你所有的问题,因为我不了解你的应用程序足够多,但这是一个很好的起点。


很酷。感谢您的快速回应,罗伯特。通过那种解决方案,您的Rails后端是否也可以被普通网页界面访问?还是只为iPhone应用提供服务?我非常有兴趣了解Objective Resource,但在开始提问之前我会先去研究一下它。 - erskingardner
它也可以通过Web界面访问,但那只是为了测试目的,因为它纯粹是为iPhone应用程序后端设计的。我开发Rails代码,在浏览器上进行初始测试,然后使用Objective Resource与之连接。 - Robert Redmond
你在应用程序和后端之间使用了哪些身份验证方式 - 有什么需要注意的地方或建议吗?谢谢。 - Chris Kimpton
我的应用程序处于原型阶段,因此我还没有对身份验证做任何事情。 - Robert Redmond

0

也许你会发现我的例子很有用,它是一个基于railsember.js的应用程序,使用基于ember-auth和几个OAuth策略的令牌身份验证。它具有响应式设计,并且可以作为桌面移动应用程序在Phonegap中运行。

目前在devel分支中:https://github.com/joscas/base_app/tree/devel

生活在这里:https://starter-app-staging.herokuapp.com 适用于桌面版本。

它使用phonegap-rails gem(我也是作者)导出应用程序资源、修复路径等,无需麻烦。


嘿@joscas,你能否提供更多细节吗?我正在尝试创建类似的应用程序,它可以在Android离线时工作,并与托管在VPS上的Rails服务器同步。当应用程序能够访问互联网时,它将连接到Rails服务器并上传/获取数据。 - rahoolm
对于该应用程序的离线数据同步,我会使用Couchbase移动版http://developer.couchbase.com/mobile/。请注意,他们支持Phonegap。否则,如果您没有多个用户和安全问题,则基本的CouchDB复制将起作用。 - joscas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接