我想实现与Rails应用程序集成的iOS Enterprise无线分发。
由于企业分发应用程序可以安装在任何iOS设备上,Apple(可以理解)要求下载应用程序的用户首先登录以进行身份验证。然后,他们单击指向清单文件(清单,plist)的链接,该文件用于从清单中指定的目录启动下载(必须明确可访问,但必须通过相同的登录权限进行保护)。
我在Rails应用程序上使用HTTP BASIC身份验证,如果需要,我可以创建一个静态页面。
我的问题是,如何指定通过Rails身份验证但不通过动态路由访问的清单文件的链接(即使是通过动态路由访问静态页面)。我相信如果我能找到一种链接到清单文件的方法,即密码保护,那么该解决方案也适用于应用安装映像。
我不能公开这些,因为他们需要密码保护。我不能将它们放在控制器/模型/视图层次结构中,因为它们都依赖于动态路径等。
每次更新应用程序时,我还要避免更新routes.rb文件。
对此表示赞赏,谢谢。
答案 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文件。如果您有任何问题,请发表评论。