2011-12-14 108 views
1

我想实现iOS Enterprise无线分布,与Rails应用程序集成。Rails和iOS企业分布

由于企业分发应用程序可以安装在任何iOS设备上,Apple(可以理解)要求下载应用程序的用户首先登录进行身份验证。然后,他们点击指向清单文件(清单,plist)的链接,该清单文件用于从清单中指定的目录启动下载(必须明确可访问,但通过相同的登录特权进行保护)。

我在Rails应用程序上使用HTTP BASIC身份验证,如果需要,我可以创建一个静态页面。

我的问题是,我怎么能指定一个链接到清单文件,通过Rails认证,但不是通过动态路由访问(即使静态页面通过动态路由访问)。我相信,如果我能找到链接到清单文件的方式,即受密码保护,那么该解决方案也适用于应用程序安装映像。

我不能把这些公开,因为他们需要密码保护。我不能把它们放在控制器/模型/视图层次结构中,因为它们都依赖于动态路径等。

我宁愿避免每次更新应用程序时都需要更新routes.rb文件。

对此的建议将不胜感激,谢谢。

+0

那么你是在一个狭窄的地方。如果你想为每个版本的图像提供一个唯一的固定路径,那么就没有其他办法,那么每次只更改路由文件。您也可以创建一个YAML文件,并正确加载routes.rb文件。所以你只需要改变YAML文件并重新启动应用程序,而不是更新代码。 – agmcleod 2011-12-14 13:29:14

回答

1

只是重新阅读你的问题,我想我理解正确。当您上传新清单文件和新应用程序文件时,您希望更新链接,指向新文件,同时保持旧版本联机。这里最主要的是在清单和客户端文件名中都保留某种版本控制ID。然后在URL中使用它。

设置这在你的路由文件:

match '/getclient/:id.plist' => 'clients#show', :as => 'show_client' 
match '/getclient/latest' => 'clients#latest', :as => 'lastest_client' 

在以下控制器的代码依赖于清单的plist文件和应用程序客户端在app/clients文件夹之中。

现在在你的控制器,有这样的事:

class ClientsController < ApplicationController 
    before_filter :basic_authentication 

    def show 
    render :xml => IO.read(File.join(Rails.root, "app/clients/manifest_#{params[:id]}.plist")) 
    end 

    def latest 
    file = plist_files.last 
    latest_id = "#{file.split('manifest_')[1].split('.plist')[0]}" 
    redirect_to show_client_url(lastest_id) 
    end 

    private 

    def basic_authentication 
    authenticate_or_request_with_http_basic do |username, password| 
     username == "username" && password == "password" 
    end 
    end 

    def plist_files 
    # assuming file format is like: manifest_versionid.plist 
    Dir.glob(File.join(Rails.root, "app/clients/*.plist")) 
    end 
end 

我肯定在这里做一些假设这是如何工作的。我不能说我之前已经链接过一个plist文件来下载一个应用程序。如果您有任何问题,请发表评论。