肖威洞察 | 2.5 個人如何開發一款跨終端的產品?[Ruby Tuesday 的分享] · 簡單心理技術團隊...
基於 Ruby on Rails 的 Variant Response,以及 Browser gem 來區分裝置,使用響應式設計和 Turbolinks 來優化使用者體驗。
2.5 個人?
- 1 個全棧(我 _)
- 1 個 Ruby 程式設計師
- 0.5 個前端開發(產品經理兼職)
跨終端?
- 電腦:瀏覽器、微信 PC 版(PC 版微信支援微信登陸)
- 平板:瀏覽器、App(Android & iOS)、微信
- 手機:瀏覽器、App(Android & iOS)、微信
這些終端不僅用於訪問,還需要支援推送和支付:
- 通知渠道:郵件、簡訊、微信、App 推送
- 支付渠道:支付寶、微信支付、銀聯支付
解決方案
- 儘可能降低開發工作量(人員有限)
- 儘可能利用 RoR 已有技術
- 基於 User Agent 資訊來區分具體終端
從 RoR 出發
- 使用 Turbolinks 優化網頁載入體驗
- 不使用前端 MVC 框架加重工作量
- 使用響應式設計 + 部分頁面 Variant Response
- 不針對各個終端單獨製作頁面
基於 browser 區分終端
- browser 的雙重含義:瀏覽器 和 browser gem
- 每個終端都有各自的 User Agent
- 通過擴充套件 browser gem 來判斷當前的終端型別
- 通過列印終端型別到 body class 使得 CSS 可以針對性調整樣式
具體步驟
1. 使用並擴充套件 browser gem 來判斷終端型別
Browser::NAMES[:smileback] = 'SmileBack' # 我們 App 的自定義 User Agent 標識
Browser::NAMES[:wechat] = 'Wechat'
Browser::NAMES[:desktop] = 'Desktop'
class Browser
module Meta
class Smileback < Base
def meta
'smileback' if browser.smileback?
end
end
class Wechat < Base
def meta
'wechat' if browser.wechat?
end
end
class Desktop < Base
def meta
'desktop' if browser.desktop?
end
end
end
module Consoles
def smileback?
!(ua =~ /smileback/i).nil?
end
def wechat?
!(ua =~ /MicroMessenger/i).nil?
end
def desktop?
!mobile? && !wechat? && !smileback?
end
end
end
2. 在 html body class 裡新增 browser 資訊,方便 CSS 套用
class=" Browser.new(ua: request.env['HTTP_USER_AGENT']).to_s %>">
-->
body{ /* 預設的樣式 */ }
body.desktop{ /* 桌面瀏覽器定製樣式 */ }
body.mobile{ /* 手機瀏覽器定製樣式 */ }
body.wechat{ /* 微信定製樣式 */ }
3. 使用 Variant Response 來針對部分割槽別大的頁面做兩套或多套 views
# application_controller.rb
before_action :detect_browser
private
def detect_browser
request.variant = :mobile if Browser.new(ua: request.env['HTTP_USER_AGENT']).mobile?
end
需要拆分的頁面,做成如下形式:
app/views/pages/home.erb
app/views/pages/home.html+mobile.erb # 檔名格式為 響應格式+裝置名
4. 新增 helper,方便複雜的情況下呼叫,比如支付
# application_helper.rb
def browser
@_browser ||= Browser.new(ua: request.env['HTTP_USER_AGENT'])
end
/ 懶得轉 erb 格式了,下面這段是 slim 格式的
- if browser.smileback?
a.buttonhref="jdxlsmileback://recharges/#{resource.id}/pay"支付寶付款
= link_to '銀聯付款', pay_recharge_path(resource, unionpay: true), 'data-no-turbolink' => true
- elsif browser.wechat?
- if current_user.weixin_id
= link_to '微信支付', '#', id: 'wepay', class: 'button'
= link_to '銀聯付款', pay_recharge_path(resource, unionpay: true), 'data-no-turbolink' => true
- else
= link_to '銀聯付款', pay_recharge_path(resource, unionpay: true), 'data-no-turbolink' => true, class: 'button'
- elsif browser.mobile?
= link_to '支付寶付款', pay_recharge_path(resource, alipay: true), class: 'button', 'data-no-turbolink' => true
= link_to '銀聯付款', pay_recharge_path(resource, unionpay: true), 'data-no-turbolink' => true
- else
= link_to '支付寶付款', pay_recharge_path(resource, alipay: true), class: 'button', 'data-no-turbolink' => true
= link_to '微信支付', pay_recharge_path(resource, scan_wepay: true)
= link_to '銀聯付款', pay_recharge_path(resource, unionpay: true), 'data-no-turbolink' => true
其它經驗
- iOS App 我們用 WKWebView 套的殼,WKWebView 比 UIWebView 效能更好些,但限制也更多些,具體可以 Google。
- Android App 我們用預設的 WebView,目前沒發現更好的替代品。
- 支付渠道之前我們是自己封裝的,現在發現 Ping++ 也不錯,大家可以試試。
重點來了!!!
簡單心理是什麼?
- 最大的華語心理諮詢平臺
- 最嚴格的諮詢師入駐稽核
- 立志於提供最專業的心理服務
內心世界那麼大,想不想來看看?
我們需要:
我們提供:
- 最人性化的工作環境(老闆及大部分員工都有心理學專業背景,程式設計師鼓勵師弱爆了 :smirk: )
- 非北京地區可遠端工作(本部位於北京中關村)
歡迎勾搭 hr@jiandanxinli.com
休息下,看看養眼的照片吧(非 PS)
女王大人(曾用名:煤球)及她的孩子們 [圖片上傳失敗...(image-330053-1550989501273)]
各種帥哥美女雲集的活動 [圖片上傳失敗...(image-e549c0-1550989501273)]
瞭解更多我們公司的詳情可以移步這裡: www.jiandanxinli.com/pages/37
相關文章
- 肖威洞察 | Ruby on Rails 的快速學習的體系框架;AI框架
- [開源] SpriteJS — 一款簡單的跨終端 canvas 繪圖框架JSCanvas繪圖框架
- [開源] SpriteJS -- 一款簡單的跨終端 canvas 繪圖框架JSCanvas繪圖框架
- 一個研發團隊是如何堅持7年技術分享的?
- 中小團隊的技術負責人如何做好技術團隊建設
- 社會技術系統框架中的產品技術團隊 - esilva框架
- 如何使用前端技術開發一個桌面跨端應用前端跨端
- 如何寫好B端產品的技術方案?
- 團隊管理、團隊人員技術培養 的 思考和交流
- Chameleon跨端框架——一個理想主義團隊的開源作品Chameleon跨端框架
- Chameleon跨端框架——壹個理想主義團隊的開源作品Chameleon跨端框架
- 肖威洞察 | 商業社會的深度思考
- 技術管理進階——如何規劃團隊的技術發展方向
- Go 開發團隊技術 leader Russ Cox 發文分享 Go 的版本控制歷史Go
- 這個團隊做了OpenAI沒Open的技術,開源OpenRLHF讓對齊大模型超簡單OpenAI大模型
- 百人研發團隊百億銷售規模的技術架構實踐分享架構
- 中小團隊如何做單機類產品的遊戲測試?遊戲
- 探究如何管理和領導遠端開發人員團隊
- 肖威洞察 | 時間自由的九大段位
- 跨平臺開發技術簡介!
- 肖威洞察 | 如何做好區塊鏈行業的教育體系區塊鏈行業
- 如何成為一名拖垮整個團隊的產品經理?
- 小團隊的技術管理
- 異地技術團隊高效協作的經驗分享
- 肖威洞察 | 針對於 SUPERXSCHOOL 的後續進展
- 技術團隊
- 如何使用簡單的終端命令更新macOSMac
- 開發者分享在多個區域同步發行一款產品的實戰經驗
- Amplitude產品團隊之旅
- 技術簡介——後端開發後端
- 安全團隊如何加強終端使用者的意識
- 從零開始:管理層提升與技術團隊的團隊溝通
- 區塊鏈dapp開發公司 | dapp開發技術團隊區塊鏈APP
- 我終於統一了團隊的技術方案設計模板
- NPDP|作為產品經理,如何愉快地與跨職能團隊協作?
- 幽默:Ruby on Rails團隊提出Rail治理名單引發爭議AI
- 技術管理進階——如何提升團隊的合作和技術氛圍
- 工業產品開發過程中的PDM技術