在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):jpmobile/jpmobile开源软件地址(OpenSource Url):https://github.com/jpmobile/jpmobile开源编程语言(OpenSource Language):Ruby 99.5%开源软件介绍(OpenSource Introduction):jpmobile: A Rails plugin for Japanese mobile-phonesjpmobileとは携帯電話特有の機能を Rails や Rack middleware で利用するためのプラグイン。 以下の機能を備える。
また Rails 5.0 に以下の機能を追加する
他のバージョンの Rails については Versions : Jpmobile vs Rails を参照。 インストールgemでインストールする場合% gem install jpmobile IPアドレス検証が必要な場合% gem install jpmobile-ipaddresses ディスプレイ情報を取得する必要がある場合% gem install jpmobile-terminfo 使用例携帯電話の識別環境変数 キャリアの識別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 %>
<% if request.tablet? %>
タブレットからのアクセスです。
<% else %>
タブレットからのアクセスではありません。
<% end %> 別に用意した携帯電話用コントローラへリダイレクトする例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 に位置情報が格納されます。 @latitude = request.mobile.position.lat
@longuitude = request.mobile.position.lon GeoKit との連携vendor/plugins/geokit以下にGeoKitがインストールされていると、Jpmobile::PositionにGeoKit::Mappableがincludeされる。したがって、 request.mobile.position.distance_to('札幌駅') とすることで、端末と「札幌駅」との距離を求めることができる。詳細は https://www.rubydoc.info/github/geokit/geokit/master/frames 参照。 端末情報の取得端末側から通知されている場合、request.mobile.ident で 契約に固有の識別子もしくは端末の製造番号を取得できる。 両方存在する場合は契約に固有のIDが優先される。
IPの検証キャリアが公開しているIPアドレス帯域からのアクセスか判定する。 request.mobile.valid_ip? ただし jpmobile-ipaddresses がインストールされていないか、スマートフォンの場合は必ずfalseとなる。 端末の画面サイズrequest.mobile.display で Jpmobile::Display クラスのインスタンスが返る。 画面幅 <%= request.mobile.display.width %>
画面高さ <%= request.mobile.display.height %> ただし jpmobile-terminfo がインストールされていない場合はエラーとなるので注意が必要。 文字コード変換機能/絵文字のキャリア間相互変換jpmobileを読み込むとDoCoMo、Au、SoftBankの絵文字を透過的に扱うことができる。
携帯電話上では特に問題とならない。PCブラウザでテストする際に問題となるためのオプション。
Rails のみ半角・全角の自動変換フィルターが用意されている。用いるには
と指定する。またtextareaやhidden/text/passwordのinputタグで半角に変換したくない場合は :input => true
を指定する。このときNokogiriが必要となるため、Gemfileに追記してインストールする必要がある。
Jpmobile内では、各キャリアの絵文字はUnicode私的領域上にマッピングされ、管理される。 このとき、DoCoMo、Auは公式サイト記載のマッピングが使用される。 ただしSoftBankはAuとの重複を避けるため、公式のマッピングに0x1000加算しU+F001以降に割り当てる。 テンプレート内ではUTF-8でエンコードするか、数値文字参照の&#xHHHH;形式で指定する。 絵文字は送出時に内蔵の変換表に基づいて変換され、携帯電話のエンコーディングにあわせて送出される。 携帯電話から受信した絵文字は上記マッピングに基づいてUTF-8でparamsに渡される。
ビューの自動振り分けビューの自動振り分けを行うには、以下の設定が必要です。 class ApplicationController < ActionController::Base
include Jpmobile::ViewSelector
end DoCoMo携帯電話からアクセスすると、
の順でテンプレートを検索し、最初に見付かったテンプレートが利用される。 Auの場合は、index_mobile_au.html.erb、Softbankの場合はindex_mobile_softbank.html.erbが最初に 検索される。 またiPhoneからアクセスすると、
の順でテンプレートを検索する。 Androidの場合はindex_smart_phone_android.html.erb、Windows Phoneの場合はindex_smart_phone_windows_phone.html.erbが最初に検索される。 自動振り分けを無効化するには、アクションにおいて以下のように設定する def index
disable_mobile_view!
end アクション定義の省略Railsでは、アクション名に対応するテンプレートが存在する場合、アクション用のメソッド定義を省略できる。 しかし、端末向けテンプレートしか存在しないアクションの場合、jpmobileではメソッド定義を省略することを許していない。 class MyController < ApplicationController
# app/views/my/index_smart_phone.html.erb がある場合でも、次のメソッド定義は必須。
def index
end
end 次のように設定を加えると、これを省略できるようになる。 class MyController < ApplicationController
include Jpmobile::MethodLessActionSupport
end 位置情報の取得用リンクの生成以下のようなコードで、端末に位置情報を要求するリンクを出力する。 <%= get_position_link_to("位置情報を取得する", :action=>:gps) %> セッションIDの付与(Trans SID)Cookie非対応携帯だけに付与するclass MyController
trans_sid
end PCにも付与するclass MyController
trans_sid :always
end trans_sid 機能を使う場合には、cookie session store を使用することができず、 active_record_storeのgemパッケージが必要です。 また Rails 5.0 では Cookie が使える場合にはそちらが優先されてしまうため、:always を指定した場合に問題になる場合があります。 trans_sid を使用する際には、例えば config/initializers/session_store.rb で Rails.application.config.session_store :active_record_store
Rails.application.config.session_options = {:cookie_only => false} として active_record_store を使用するように設定し、:cookie_only => false として Cookie を優先しないように設定します。 このとき ApplicationController において protect_from_forgery の :secret を指定するか、 あるいは protect_from_forgery を解除する必要があるでしょう。 また、 link_to "hoge", "/controller/action/id" のようにリンク先を直接指定するとセッションIDは付加されません。 link_to "hoge", :controller => "controller", :action => "action", :id => "id" のように指定する必要があります。 メールの送受信メールにて絵文字や漢字コードの変換、ビューの自動振り分けを行なうには Jpmobile::Mailer::Base を使う。 class MobileMailer < Jpmobile::Mailer::Base
default :from => "[email protected]"
def registration(to)
mail(:to => to)
end
def receive(email)
email
end
end
jpmobileの開発方法jpmobileの開発に関しては こちら へ リンク作者Copyright 2006-2012 (c) Yoji Shidara, under MIT License. Shin-ichiro OGAWA [email protected], Yoji Shidara [email protected] |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论