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
問題なく動く
$.myTblView.addEventListener('click', function(e) {
var name = e.rowData.name
}
Android
なんか、、、めっちゃ重くてカクカクする。(でも新しい機種ならある程度解消できてるかも)
古い機種対応を考えるとListViewで代用する方がいいです
後TableViewのeditプロパティが使えないので、自前で実装するしかない
$.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);
}
}