2012年10月20日土曜日

本気でTitanium mobile / ACS

■クロスプラットフォームでPush Notification必須■

会社でのアプリ開発、当初はobj-cで進めてましたが「Androidは?」という意見が出てきたので、大きな投資なしにクロスプラットフォームでのPush Notificationが使えるTitanium ACSを使うことになりました。

私、基本的にラクにラクに生きていたいのでインターフェースビルダのないツールってのは苦手なんすけど…でもHTML5+JavaScriptのPhoneGapよりJavaScript+NativeのTitaniumの方が大分サクサク動きますし、Sencha TouchほどではないにせよPhoneGapよりMVCをきれいに分離できるので、まぁいいや。

ただ、基本的にデモ程度しか作ったことがないので、ViewをフリップさせるのすらGoogle先生のお世話になりっぱなしです。

例えば、「キーボードが出てきたよ」というイベントや、その時有効な画面サイズを引っ張ってくることができない(obj-cでプラグイン書けば可能)ので、よくある「テキストを入力しようとすると適切な位置にTextFieldが動く…っていうアレを実装するのに一苦労する…というレベルです。

「obj-cなら…」というため息を抑えつつ仕事する今日この頃。

■ACSを使うには■

以前はti.cloud.jsを手動でコピーする等の手順が必要でしたが、最新のSDK 2.1では新規プロジェクトを作る際に「automatically cloud-enabled this application」をチェックすれば自動的にモジュールが読み込まれるようになりました。

ググって出てくる事例は、この辺がちょっと古いものもあるので、「本家ページ」を参照しながら読み進むと良いです。

これでcreateUser, loginまでは何の問題もなく進みます。強いていえば、サンプルのcreateLoginではパラメータとしてemailを渡していないことと、「Create Succsssが返って来ているのにACS Management側で登録されたデータが見えない」と思ったらmanagement画面のモードがDevelopmentでなくProductionになっていた、って2点ぐらいです。

■Chatメッセージを送ってみる■

本家掲載のサンプルを使って、ボタンをクリックするとメッセージを送信するテストをしてみました。なお、ここで一つハマったのは、idsです。usernameでもemailでもなく、user idを指定しなければいけません。

app.jsでログイン処理を書き、以下のコードを適当なwindow.jsに貼ります。


    var button = Ti.UI.createButton({
        top:100,
        width:50,
        height:30,
        title:'送信'
    });
    view.add(button);
    
    button.addEventListener('click', function(e) {
        var ids = ['ここはユーザID'];
        Cloud.Chats.create({
            to_ids: ids.join(','),
            message: 'Good morning'
        }, function (e) {
            if (e.success) {
                for (var i = 0; i < e.chats.length; i++) {
                    var chat = e.chats[i];
                    alert('Success:\\n' +
                        'From: ' + chat.from.first_name + ' ' + chat.from.last_name + '\\n' +
                        'Updated: ' + chat.updated_at + '\\n' +
                        'Message: ' + chat.message);
                }
            } else {
                alert('Error:\\n' +
                    ((e.error && e.message) || JSON.stringify(e)));
            }
        });        
    });


「送信」ボタンをタップすると数秒後「success」のアラートが表示されるはずです。

■ところで■

ACSはRESTベースのサービスです。
別にTitaniumに限定されているわけじゃないんですよね。

nativeだったら今頃は…。でも、このまま進みます

次回いつになるかわかりませんが、お楽しみに。

0 件のコメント:

コメントを投稿