= jpmobile: A Rails plugin for Japanese mobile-phones == jpmobileとは 携帯電話特有の機能を Rails 3.0 や Rack middleware で利用するためのプラグイン。 以下の機能を備える。 * 携帯電話のキャリア判別 * 端末位置情報の取得 * {GeoKit}[http://geokit.rubyforge.org] との連携 * 端末製造番号、契約者番号等の取得 * IPアドレスの検証(キャリアが公開しているIPアドレス帯域からのアクセスか判定) * IPアドレスの検証には {jpmobile-ipaddresses}[http://github.com/jpmobile/jpmobile-ipaddresses] が必要です。 * ディスプレイ情報(画面サイズ、ブラウザ画面サイズ、カラー・白黒、色数)の取得 * ディスプレイ情報の取得には {jpmobile-terminfo}[http://github.com/jpmobile/jpmobile-terminfo] が必要です。 * 文字コード変換機能/絵文字のキャリア間相互変換 * メールの送信 * 絵文字と漢字コードの変換 * メールの受信(experimental) * 絵文字と漢字コードの変換 また Rails 3.0 に以下の機能を追加する * ビューへの自動振分け * 位置情報取得などのリンクヘルパーの追加 * セッションIDをフォーム/リンクに付与(Trans SID) == インストール === Rails pluginとしてインストールする場合 % rails plugin install git://github.com/jpmobile/jpmobile.git ==== IPアドレス検証が必要な場合 % rails plugin install git://github.com/jpmobile/jpmobile-ipaddresses.git ==== ディスプレイ情報を取得する必要がある場合 % rails plugin install git://github.com/jpmobile/jpmobile-terminfo.git === gemでインストールする場合 % gem install jpmobile ==== IPアドレス検証が必要な場合 % gem install jpmobile-ipaddresses ==== ディスプレイ情報を取得する必要がある場合 % gem install jpmobile-terminfo == 使用例 === 携帯電話の識別 環境変数 env['rack.jpmobile'] にキャリアクラスのインスタンスが格納されています。また Rack::Request#mobile としても取得可能です。 ==== キャリアの識別 case request.mobile when Jpmobile::Mobile::Docomo # for DoCoMo when Jpmobile::Mobile::Au # for au when Jpmobile::Mobile::Softbank # for SoftBank when Jpmobile::Mobile::Willcom # for Willcom when Jpmobile::Mobile::Emobile # for EMOBILE else # for PC end あるいは if request.mobile.is_a?(Jpmobile::Mobile::Docomo) # for DoCoMo end ==== ビューの中で一部を切替える例 <% if request.mobile? %> 携帯電話からのアクセスです。 <% else %> 携帯電話からのアクセスではありません。 <% end %> <% if request.smart_phone? %> スマートフォンからのアクセスです。 <% else %> スマートフォンからのアクセスではありません。 <% end %> ==== 別に用意した携帯電話用コントローラへリダイレクトする例 class PcController < ApplicationController before_filter :redirect_if_mobile def index end private def redirect_if_mobile if request.mobile? pa = params.dup pa[:controller] = "/mobile" redirect_to pa elsif request.smart_phone? pa = params.dup pa[:controller] = "/smart_phone" redirect_to pa end end end class MobileController < ApplicationController end === 位置情報の取得 Rack::Request#mobile.position に位置情報が格納されます。 @latitude = request.mobile.position.lat @longuitude = request.mobile.position.lon ==== {GeoKit}[http://geokit.rubyforge.org] との連携 vandor/plugins/geokit以下にGeoKitがインストールされていると、Jpmobile::PositionにGeoKit::Mappableがincludeされる。したがって、 request.mobile.position.distance_to('札幌駅') とすることで、端末と「札幌駅」との距離を求めることができる。詳細は http://geokit.rubyforge.org/api/index.html 参照。 === 端末情報の取得 端末側から通知されている場合、request.mobile.ident で 契約に固有の識別子もしくは端末の製造番号を取得できる。 両方存在する場合は契約に固有のIDが優先される。 * 契約に固有のID (request.mobile.ident_subscriber) * au: EZ番号(サブスクライバ番号) * DoCoMo: FOMAカード製造番号 * EMOBILE: EMnet対応端末から通知されるユニークなユーザID * 端末製造番号 (request.mobile.ident_device) * DoCoMo: 端末製造番号(FOMA, MOVA) * SoftBank: 製造番号 === IPの検証 キャリアが公開しているIPアドレス帯域からのアクセスか判定する。 request.mobile.valid_ip? ただし {jpmobile-ipaddresses}[http://github.com/jpmobile/jpmobile-ipaddresses] がインストールされていないか、スマートフォンの場合は必ずfalseとなる。 === 端末の画面サイズ request.mobile.display で Jpmobile::Display クラスのインスタンスが返る。 画面幅 <%= request.mobile.display.width %> 画面高さ <%= request.mobile.display.height %> ただし {jpmobile-terminfo}[http://github.com/jpmobile/jpmobile-terminfo] がインストールされていない場合はエラーとなるので注意が必要。 === 文字コード変換機能/絵文字のキャリア間相互変換 jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱うことができる。 * Rails の場合は vendor/plugins に配置し、下記の設定を追加することで有効になる。 # Rack middleware を追加するメソッド Rails.application.config.jpmobile.mobile_filter or Jpmobile.config.mobile_filter * 下記の設定を追加することで、