Rails和iOS企业分发

时间:2011-12-14 13:09:41

标签: ruby-on-rails ios enterprise

我想实现与Rails应用程序集成的iOS Enterprise无线分发。

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

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

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

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

每次更新应用程序时,我还要避免更新routes.rb文件。

对此表示赞赏,谢谢。

1 个答案:

答案 0 :(得分: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文件。如果您有任何问题,请发表评论。