[![CircleCI](https://circleci.com/gh/jpmobile/jpmobile/tree/master.svg?style=svg)](https://circleci.com/gh/jpmobile/jpmobile/tree/master) [![Code Climate](https://codeclimate.com/github/jpmobile/jpmobile/badges/gpa.svg)](https://codeclimate.com/github/jpmobile/jpmobile) # jpmobile: A Rails plugin for Japanese mobile-phones ## jpmobileとは 携帯電話特有の機能を Rails 5.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 5.0 に以下の機能を追加する * ビューへの自動振分け * 位置情報取得などのリンクヘルパーの追加 * セッションIDをフォーム/リンクに付与(Trans SID) 他のバージョンの Rails については [Versions : Jpmobile vs Rails](https://github.com/jpmobile/jpmobile/wiki/Version-:-Jpmobile-vs-Rails) を参照。 ## インストール ### Rails pluginとしてインストールする場合 ```shell % rails plugin install git://github.com/jpmobile/jpmobile.git ``` #### IPアドレス検証が必要な場合 ```shell % rails plugin install git://github.com/jpmobile/jpmobile-ipaddresses.git ``` #### ディスプレイ情報を取得する必要がある場合 ```shell % rails plugin install git://github.com/jpmobile/jpmobile-terminfo.git ``` ### gemでインストールする場合 ```shell % gem install jpmobile ``` #### IPアドレス検証が必要な場合 ```shell % gem install jpmobile-ipaddresses ``` #### ディスプレイ情報を取得する必要がある場合 ```shell % gem install jpmobile-terminfo ``` ## 使用例 ### 携帯電話の識別 環境変数 `ENV['rack.jpmobile']` にキャリアクラスのインスタンスが格納されています。また Rack::Request#mobile としても取得可能です。 #### キャリアの識別 ```ruby 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 ``` あるいは ```ruby if request.mobile.is_a?(Jpmobile::Mobile::Docomo) # for DoCoMo end ``` #### ビューの中で一部を切替える例 ```ruby <% if request.mobile? %> 携帯電話からのアクセスです。 <% else %> 携帯電話からのアクセスではありません。 <% end %> <% if request.smart_phone? %> スマートフォンからのアクセスです。 <% else %> スマートフォンからのアクセスではありません。 <% end %> <% if request.tablet? %> タブレットからのアクセスです。 <% else %> タブレットからのアクセスではありません。 <% end %> ``` #### 別に用意した携帯電話用コントローラへリダイレクトする例 ```ruby class PcController < ApplicationController before_action :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 に位置情報が格納されます。 ```ruby @latitude = request.mobile.position.lat @longuitude = request.mobile.position.lon ``` #### [GeoKit](http://geokit.rubyforge.org) との連携 vendor/plugins/geokit以下にGeoKitがインストールされていると、Jpmobile::PositionにGeoKit::Mappabl eがincludeされる。したがって、 ```ruby 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アドレス帯域からのアクセスか判定する。 ```ruby request.mobile.valid_ip? ``` ただし [jpmobile-ipaddresses](http://github.com/jpmobile/jpmobile-ipaddresses) がインストールされていないか、スマートフォンの場合は必ずfalseとなる。 ### 端末の画面サイズ request.mobile.display で Jpmobile::Display クラスのインスタンスが返る。 ```ruby 画面幅 <%= request.mobile.display.width %> 画面高さ <%= request.mobile.display.height %> ``` ただし [jpmobile-terminfo](http://github.com/jpmobile/jpmobile-terminfo) がインストールされていない場合はエラーとなるので注意が必要。 ### 文字コード変換機能/絵文字のキャリア間相互変換 jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱うことができる。 * Rails の場合は vendor/plugins に配置し、下記の設定を追加することで有効になる。 ```ruby # Rack middleware を追加するメソッド Rails.application.config.jpmobile.mobile_filter or Jpmobile.config.mobile_filter ``` * 下記の設定を追加することで、