LoginSignup
12
13

More than 5 years have passed since last update.

TitaniumでiOSアプリとAndroidアプリを開発する時の違い

Posted at

Titanium v3.2でAlloyを使ってiOSアプリとAndroidアプリを作成した時の違いです。他にもいろいろありそう。。。

シミュレータ

iOS

軽快に動く

Android

全然ダメ、やっと動いたと思ったらめちゃ重いし、突然落ちたりするので、実機を繋いでビルドする方がいいです

「戻る」ボタンの実装

iOS

NavigationWindow(旧:NavigationGroup)が使うと勝手に出てきます。

Android

デバイスの戻るボタンを活用します。
何もしないとアプリを終了してしまうので、新規に開くWindowにオプションをつけます。

<Window title="detail" class="container" exitOnClose="false" fullscreen="false">

exitOnCloseとfullscreenがポイント

モジュールのファイル名への制限

app/lib以下に配置した共通モジュールについて

iOS

特になし

Android

iOS版で動いていたモジュールがなぜか動かずで、ファイル名を変更したら動きました。
どうやら変数名とファイル名がかぶっているとダメっぽいです。

TableView

clickイベントの取得方法が若干違いました。

iOS

問題なく動く

clickイベント
$.myTblView.addEventListener('click', function(e) {
    var name = e.rowData.name
}

Android

なんか、、、めっちゃ重くてカクカクする。(でも新しい機種ならある程度解消できてるかも)

古い機種対応を考えるとListViewで代用する方がいいです

後TableViewのeditプロパティが使えないので、自前で実装するしかない

clickイベント
$.myTblView.addEventListener('click', function(e) {
    var name = e.row.name
}

プッシュ通知

AppceleratorCloudService(ACS)を使います。

iOSの場合だとプッシュ通知に使う証明書を取得したり、AndroidだとGCMに登録したりの違いがありますが、ここでは省略します。

参考:http://fromkk.me/ti_cloudpush_with_titanium/

違いはデバイストークンを取得するところと、登録するところ

iOS

デバイストークン取得サンプル
function getDeviceToken(){
    Titanium.Network.registerForPushNotifications({
        types: [
            Titanium.Network.NOTIFICATION_TYPE_BADGE,
            Titanium.Network.NOTIFICATION_TYPE_ALERT,
            Titanium.Network.NOTIFICATION_TYPE_SOUND
        ],
        success:function(e)
        {
            deviceToken = e.deviceToken;
            Pass = deviceToken.substr(0,8);

            //デバイストークンとパスワードを元にACSにログインを試みる
            //ログイン失敗したらユーザーがまだないので新規に作成する
            //ここはiOS、Android共通
            loginDefault();

        },
        error:function(e)
        {
            alert("Device Token Error: "+e.message);
        },
        callback:function(e)
        {
            alert("push notification received"+JSON.stringify(e.data));
        }
    });

Android

デバイストークン取得サンプル
function getDeviceToken() {
    var CloudPush = require('ti.cloudpush');
    CloudPush.addEventListener('callback', function(evt) {
        alert(evt.payload);
    });
    CloudPush.addEventListener('trayClickLaunchedApp', function(evt) {
        Ti.API.info('Tray Click Launched App (app was not running)');
    });
    CloudPush.addEventListener('trayClickFocusedApp', function(evt) {
        Ti.API.info('Tray Click Focused App (app was already running)');
    });
    CloudPush.retrieveDeviceToken({
        success: deviceTokenSuccess,
        error: deviceTokenError
    });

    function deviceTokenSuccess(e) {
        Ti.API.info('Device Token: ' + e.deviceToken);
        //Alloy.CFG.deviceToken = e.deviceToken;
        deviceToken = e.deviceToken;
        Pass = deviceToken.substr(0,8);
        loginDefault();

        CloudPush.enabled = true;
    }

    function deviceTokenError(e) {
        alert('Failed to register for push! ' + e.error);
    }
}
12
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
13