2011-12-14 7 views
1

Railsアプリケーションと統合されたiOS Enterprise無線配信を実装したいと思います。RailsとiOS Enterprise Distribution

エンタープライズ配信アプリはどのiOSデバイスにもインストールできるため、アプリをダウンロードしているユーザーが最初にログインして認証する必要があります。次に、マニフェストで指定されたディレクトリからダウンロードを開始するために使用されるマニフェストファイル(マニフェスト、plist)へのリンクをクリックします(アクセス可能である必要がありますが、同じログイン特権で保護されている必要があります)。

私はRailsアプリケーションでHTTP BASIC認証を使用しており、必要に応じて静的ページを作成できます。

私の質問は、Rails認証を経由してダイナミックルート経由でアクセスされないマニフェストファイルへのリンクを指定するにはどうすればいいですか(静的ページにも動的ルート経由でアクセスします)。私は、マニフェストファイルにリンクする方法を見つけることができれば、それはパスワードで保護されていると考えて、そのソリューションはまた、アプリケーションのインストールイメージのために動作します。

パスワード保護が必要なため、これを公開することはできません。私はコントローラ/モデル/ビューの階層にこれらを置くことはできません。それらはすべて動的パスなどに依存します。

私は、アプリケーションを更新するたびにroutes.rbファイルを更新する必要はありません。

アドバイスありがとう、ありがとう。

+0

まあ、あなたはタイトなところにいます。画像のすべてのバージョンに固有の固定パスが必要な場合、毎回ルートファイルを変更するだけの方法はありません。また、YAMLファイルを作成し、routes.rbを正しくロードすることもできます。したがって、コードを更新するのではなく、YAMLファイルを変更してアプリケーションを再起動するだけで済みます。 – agmcleod

+0

ありがとうございます。私が固定されたパスで行ったとしても、それをどのように認証の背後に置くことができますか? – Snips

答えて

1

質問を再読するだけで、正しく理解できると思います。新しいマニフェストファイルと新しいアプリケーションファイルをアップロードするときには、リンクを更新して新しいファイルを指し示し、同時に古いバージョンをオンラインにします。ここで重要なのは、マニフェストファイル名とクライアントファイル名の両方にある種のバージョン管理IDを保持することです。その後、URLでそれを使用します。これはあなたのルートファイル内

セットアップ:

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

コード以下のコントローラーではapp/clientsフォルダにあるマニフェストのplistファイルとアプリのクライアントに依存します。これがどのように機能するかについて

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ファイルをリンクしているとは言えません。ご不明な点がございましたら、ご意見ください。

関連する問題