2014 02-19-titanium meetupvol16

1,076 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,076
On SlideShare
0
From Embeds
0
Number of Embeds
293
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

2014 02-19-titanium meetupvol16

  1. 1. ACSをベースに1人でスマフ ォとWebアプリ開発に取り 組んでいた話 Photo By John Shardlow http://www.flickr.com/photos/john_scone/493915787/ 14年2月19日水曜日
  2. 2. 簡単に自己紹介 こういうブログを 書いてます 14年2月19日水曜日 アプリ2本リ リース
  3. 3. 最近の活動 平日早朝+週末で 社内向けに営業支援業務アプリ作ってました アプリで利用する 企業やユーザ情報 を管理するバック エンドツール Titanium Mobile+ACS 14年2月19日水曜日 Node.js+express+Jade+acs-node
  4. 4. ACSとは? • Titaniumの開発元のAppceleratorが提供する MBaaS(エムバース) • • • MBaaSについて詳しくは技術評論社さんの記事を http://gihyo.jp/dev/serial/01/mbaas/0002 Parseの方が知名度高いかなぁ・・ スマフォアプリのバックエンドの機能で必要になりそうな 機能が揃ってる • • 14年2月19日水曜日 当然Titanium Mobileから扱いやすい Appceleratorが提供するNode.js用のnpmモジュー ルのインターフェースがTitaniumのそれとほぼ同じな のでTitaniumの延長線上で気軽にWebアプリも作れる
  5. 5. ACSの管理画面はこんな感じ 14年2月19日水曜日
  6. 6. ACS利用する方法 • TitaniumStudioでプロ ジェクト設定を行った後 tiapp.xmlを開いて Enable Cloud Serviceesの項目の Enableボタンをポチッ とする • Production Keyと Development Keyの 2つが表示されればOK です 14年2月19日水曜日 tiapp.xml
  7. 7. ACSのサンプルコードを ちょっと紹介 ©Garry Ing http://www.flickr.com/photos/garrtron/4469056722/ 14年2月19日水曜日
  8. 8. ある地点の周辺のお店検索 # ACS利用するためのおまじない ACS = require('ti.cloud') # 東京駅周辺の緯度と経度 latitude = 35.681382 longitude = 139.766084 # Webの管理画面からお店情報などを登録しておくと # 以下クエリで東京駅周辺の情報が20件検索できる ACS.Places.query page: 1 per_page: 20 where: lnglat: $nearSphere:[longitude,latitude] $maxDistance: 0.01 , (e) -> if e.success for place in e.places Ti.API.info place.name 14年2月19日水曜日
  9. 9. 登録済のユーザの メールアドレスを表示する # ACS利用するためのおまじない ACS = require('ti.cloud') ACS.Users.query page: 1 per_page: 1 where: username:”h5y1m141” , (e) -> if e.success for user in e.users Ti.API.info user.email 14年2月19日水曜日
  10. 10. 登録済のユーザ宛にメールする # ACS利用するためのおまじない ACS = require('ti.cloud') ACS.Users.query page: 1 per_page: 20 , (e) -> if e.success for user in e.users # Webの管理画面からSAMPLEという名前のテンプレートを作成 # テンプレート内にmessageBodyという変数を設定 ACS.Emails.send( template:'SAMPLE' recipients:user.email messageBody:”test mail to #{user.name}” ,(result) -> Ti.API.info "sendmail result: #{result}" ) 14年2月19日水曜日
  11. 11. 直感的にコード書ける APIが提供されています ©jeffrey james pacres http://www.flickr.com/photos/jjpacres/3293117576/ 14年2月19日水曜日
  12. 12. 良さそうに見えるけどやっぱりそれなりに 落とし穴もあります たまに出る謎のエラー 標準機能ではオブジェクト単位での一括登録や削除機能がない 14年2月19日水曜日
  13. 13. 後者についてはNode.jsをちょっと勉強してacs-nodeと いうnpmモジュール使えば解決できる log4js = require("log4js") log4js.configure appenders: [   type: "file" category: "request" filename: "logs/request.log" pattern: "-yyyy-MM-dd"   ] loggerRequest = log4js.getLogger("request") loggerRequest.info "this is request log"   # 自作モジュール類の読み込み path = require("path") modulePath = path.resolve(__dirname, "lib/geocoder.js") Geocoder = require(modulePath).Geocoder geocoder = new Geocoder()   serverModulePath = path.resolve(__dirname, "lib/server.js") Server = require(serverModulePath).Server server = new Server()  wait = (item, callback) -> setTimeout((-> geocodingAPI = "http://www.geocoding.jp/api/" address = encodeURIComponent(item.address) url = "#{geocodingAPI}?v=1.1&q=#{address}"   geocoder.start(url,(err,statusCode,body) -> if not err callback(body,item.clientName) )   ), 5000) clientList =[{"clientName":"xx","address":"xxx"}] 14年2月19日水曜日 act = ()-> # パラメータが無くなっていれば終了 return if clientList.length is 0 param = clientList[0] geocodingAPI = "http://www.geocoding.jp/api/" address = encodeURIComponent(param.address) clientName = param.clientName address = param.address url = "#{geocodingAPI}?v=1.1&q=#{address}" geocoder.start(url,(err,statusCode,body) -> if not err and body.lat isnt null and body.lng isnt null clientData = name:clientName address:address latitude:body.lat longitude:body.lng loggerRequest.info("client: #{clientName}") server.confirmClientInfo(clientData,(response) -> if response is true loggerRequest.info("#{clientName} already exist!!") else server.registClientInfo(clientData,(response) -> if response is false loggerRequest.info("FAIL: #{clientName} data is #{clientData}") else loggerRequest.info("success data is #{clientData}"") ) ) else loggerRequest.info("error clientName is #{clientName}") ) clientList.shift() setTimeout (-> act() ), 6500 act()
  14. 14. 使ってる方いましたらお互 い積極的にアウトプットし ていきましょう! Photo By Rusty Sheriff http://www.flickr.com/photos/rustysheriff/4908212366/ 14年2月19日水曜日
  15. 15. おまけ: Titanium+ACS連携サンプルアプリ • とても初歩的な内容ですがGitHubに資料あるので興 味ある方こちらご覧ください • https://github.com/h5y1m141/ streetAcademy/blob/master/4thStep.md • 上記資料使った少人数制のTitaniumMobile開発のワ ークショップをたまにやってます • 詳しくはStreetAcademy(http://streetacademy.com/myclass/443) 14年2月19日水曜日
  16. 16. LT Finish 14年2月19日水曜日

×