facebookのプロジェクト
かなり久しぶりの記事となってしまいました。
実は、最近、別のプロジェクトで忙しくて、なかなかブログが更新できませんでした(言い訳。。。💦)
最近は、facebookを活用したプロジェクトをやってました。今回は、はじめて、ディレクターとして、プロジェクトを指揮してやりました。とても、良い経験になりました。
こちらがそのサイトです。
http://www.chez-mikawa.co.jp/index.html
ぜひ、いいね!してください。
TitaniumのWebViewからのOpenLayersの呼び出しについて
Titanium Advent Calendar 2011以来の久しぶりの投稿になってしまいました。
現在、開発中のアプリがほぼ完成になりましたので、そろそろApple Storeに出したいと思っています。
個人的なアプリは今回が初めてで内容はシンプルなものにしたいと思っていました。
アプリのコンセプトは、地震系のアプリです。ただ、地図描画をするときGoogleMapの機能ではなく、OpenLayers(http://openlayers.org/)というフリーのJavaScriptベースの地図フレームワークを使用しました。
内容は、産業技術総合研究所で公開されている地震動マップ即時推定システム(QuiQuake: Quick estimation system for earthQuake maps triggered by observation records)からRSSで配信されている情報をアプリで表示している単純なものです。
http://qq.ghz.geogrid.org/QuakeMap/index.html
画面のイメージはこんな感じです。昨日、関東で朝に地震があったかと思いますが、けっこう大きな範囲であったことが分かります。
技術的には簡単で、WebViewからindex.htmlを呼び出しているだけです。ただ、index.htmlには、OpenLayersのライブラリを読み込んで、GoogleMapの表示、PINの表示、WMSレイヤを追加しています。
ちなみにWMSとは「Web Map Service」でOGCが策定した仕様で、ある地図を呼び出すときの共通の仕様になります。http://www.opengeospatial.org/standards/wms
また、OpenLayersについても今後、記事として書いていきたいと思います。
今後もどんどん記事を書いていきたいと思いますのでよろしくお願いします。
【Titanium Advent Calendar 2011:二十五日目】SalesForce Toolkitについて
【はじめに】
この記事は、@astronaughtsさん企画のTitanium Advent Calendar 2011 : ATND向けに書いています。今回、すばらしい企画を立ててくれた@astronaughtsさんに感謝します。
Titaniumは、最近使いはじめたばかりですが、現在は、SalesForceのアプリ開発をしています。Marketplaceから出ているSalesForce Toolkitを利用した開発をしていたのですが、幾つか動作しない機能があったりと、色々と苦労した点を紹介したいと思います。
【SalesForceについて】
すでにご存知の方も多いとは思います。
Salesforce - セールスフォース・ドットコム
何かと話題の多いSalesForceですが、最近は、Heroku( http://heroku.com/ )を買収したことが有名でしょうか。Rubyの作者であるまつもとゆきひろ氏が「Rubyチーフアーキテクト」に就任しています。
【SalesForce Toolkit】
今回の本題ですが、SalesForce Toolkitは、Salesforce.comのOAuth 2.0の仕組みを利用しています。詳しい内容については、Salesforce.comのOAuth 2.0を参照してください。
アプリ側では、loginの認可後に発行されたアクセストークンを利用して、Salesforce側からデータを取得します。アクセストークンの有効期限が切れた場合は、リフレッシュトークンを利用して、再度有効なアクセストークンを取得します。が、このリフレッシュトークンを利用してアクセストークンを取得する機能が動作しなく、かなり困りました。
Console上では、以下のようなメッセージが表示され、動かなくなります。
DbDotCom.REST.OAuth.refreshToken: 5Aep861GOxOe7rOs7A1z2Tsu4MweeRuYUH7SDBbwdzpDz1y8MW5rs6NG0NY9cX59syHGe.o16xJgg%3D%3D
retry: undefined
e: Error Domain=ASIHTTPRequestErrorDomain Code=3 "Authentication needed" UserInfo=0xa27ea40 {NSLocalizedDescription=Authentication needed}
XHR status: 401
[ERROR] In the error handler looking for a 401, and have a 401
[ERROR] Handleing the 401 error...
そこで、RESTの呼び出しが401で失敗したら,自前でリフレッシュトークンを利用して、有効なアクセストークンを取得して、Titaniumのプロパティーを書き換えるように実装しました。実は、このTitaniumのプロパティーについても知らなくて、今回色々と勉強になりました。
var oauthData = Ti.App.Properties.getString("oauthData_preference");
Ti.App.Properties.setString('oauthData_preference', JSON.stringify(j));
FDC.ForceOAuth.setOAuthData(j);
と、プロパティーの使い方を知りました。
実は、自前で実装後にこのTitanium Salesforce moduleについて、pomu0325さんがpomu0325: Titanium Salesforce module(SalesForce Toolkit for Appcelerator)の使い方 (2)と紹介しているのを発見しました。パッチも提供されておりますので、こちらを見ていただいた方が早いかと思います。pomu0325さん大変ありがとうございます。
もう一つは、アプリを起動後にhttps://login.salesforce.com/という、Salesforceのログイン画面を表示します。なぜか、このログイン画面が、シミュレータでは、表示されるが、実機(iPhone4)では、表示されないという問題もありました。原因は、Titanium の WebView を使用しているのですが、WebViewの指定がモジュール側でなく、アプリ側で、var dummy = Ti.UI.createWebView({});と指定することで対応できました。
【最後に】
今回、勢いでTitanium Advent Calendar 2011 : ATNDに申し込んでしまいました。はじめは、何を記事にしようか最後まで迷いましたが、会社の後輩が、Salesforceのモジュールで苦労したことで、いいんじゃないですかと言ってくれたので、なるほどと思い、この話題にさせていただきました。
また、今回の開発では、会社の後輩をはじめ、同様にSaleforce関連で開発をしている他の会社の方々にも色々と協力をしていただきありがとうございました。今後は、会社の業務もありますが、これを機会に自分でもアプリをどんどん開発していきたいと思います。
今後ともよろしくお願い致します。