投稿

12月, 2015の投稿を表示しています

Titaniumで作ったサービス「たなごころ」の紹介。技術編

イメージ
Appcelerator Titanium Advent Calendar 2015の16日目。今年開始したサービスの紹介。

園と保護者の連絡サービス「たなごころ」 保護者のスマホへ通知できて便利だよ。というサービス。

アプリは管理画面で承認しないとログインできないけど、スクリーンショットでだいたいのイメージは伝わると思う。

Android版デモ用アプリ | Google Play
iOS版デモ用アプリ | App Store
詳細は上記サイトを参照してもらうとして、今回は技術的な特徴を紹介。
期間:約8カ月。ガラケー対応でプラス2カ月
要員:私一人(画面デザインはデザイナーに依頼)
簡単なシステム構成図はこんな感じ。  




その他の特徴
園ごとにWordPressを立てて、アプリをリリース
園の運用に合わせてカスタマイズ(GitLab + Redmineで管理)
仮想サーバー4台(プロキシ:1、管理画面:1、アプリAPI:2)借りてネットワークを構築。負荷を見ながら増やす予定
現在位置を発信するアプリも作った。これは園のバスに乗る保育士さんに持ってもらってバスの現在位置を把握するため

Titaniumアプリ関連
Alloyは使ってない
AndroidとiOSでファイルを分けない。必要なときだけ分岐する
アイコンは全部ウェブフォント・・・にしたかったけど、一部ドロップシャドウがかかっているのは画像
Windowは起動してから1つだけ。ページっぽく見えるのはViewのvisibleで切り替えてるだけ
Android 2.3対応のために Titanium SDK 3.5.1.GAから上げれない

今後の技術的な課題など
Google Container Engineへ移行したい
ガラケーとAndroid2.3を切り捨てることができたらどんなに楽か
もっと自動化しないと私一人では耐えられない(深刻)

導入してもらった園には好評で来年度からは一気に増える。1法人で5施設契約してくれたところもある。
個人でも法人でも、技術セットが似てる方がいれば連絡ください。空いてる時間で手伝ってほしいです(切実)。


< Related Posts >
子育て支援ウェブサービス
今年のTitanium向けに書いた記事まとめとアプリ紹介2014版
MariaDB Galera Cl…

WordPress + WP-APIプラグイン + Titaniumアプリ

イメージ
Titanium Advent Calendar 2015の9日目。WordPressとTitaniumアプリの連携。TitaniumアプリからOAuth認証する方法を記事にしようと思ったけど、時間がなくなったので、WP-APIを使うと簡単にWordPressとやりとりできるよという話。環境: CentOS 6.7, PHP 5.6.17, WordPress 4.3.1目次WP REST API v2をインストールTitaniumアプリからデータ取得OAuth認証をしたいWordPress.org + Node.js参考WP REST API v2 Documentation1.WP REST API v2をインストールダウンロードしてきて、wp-content/pluginsに配置してアクティベートする。WordPress REST API (Version 2) | WordPress Plugins管理画面のSettings → Permalinksで「Default」以外を選んでRewriteを有効にしておく。これでREST APIが有効になったか確認。http://dev.wordpress.com/wp-json/wp/v2/posts/のURLにアクセスしてみるとJSON形式のデータを取得できる。2.Titaniumアプリからデータ取得Titanium Studioから新規アプリを作成してapp.jsを下記のように編集。var win = Ti.UI.createWindow({
  backgroundColor:'#fff'
});win.add(Ti.UI.createButton({
  title: 'Get data from WordPress'
}));
win.children[0].addEventListener('click', function() {
  var client = Ti.Network.createHTTPClient({
    onload: function(e) {
      console.log(JSON.parse(e.source.responseText));
    }
  });  client.open('GET', 'http…