QA@IT

Titanium Mobileで Titanium.App.pause のイベント内で通信できない

2886 PV

Titanium Mobile で iPhoneアプリを作成中でして、アプリ内で閲覧したページの履歴をスタックしておき、どこかのタイミングでサーバー側にPOSTするという処理の実装で質問があります。

"サーバー側にPOSTするタイミング" を、Titanium.App.pause のイベントに割当てようと思ったのですが、どうも pause イベントの中では通信ができないため?上手く動作しませんでした。

pauseイベント内で、通信できる方法があれば教えて頂けないでしょうか。

また、「そういう処理はこのイベントで扱うべき」などアドバイス頂ければ幸いです。

よろしくお願いします。

回答

その1:pauseイベントの中でregisterBackgroundServiceを実行すると、10秒以内であれば処理を継続することができます。

Ti.App.Properties.setString('message', 'こんにちは、こんにちは!');
var service = Ti.App.iOS.registerBackgroundService({url:'service.js'});

Resources/service.js に実行したい内容を記述します。
欠点としては、通信のエラーが発生した際の処理を実装しておかないと、例えば10秒経過してタイムアウトしたときには何も記録が残らなくなってしまいます。

その2:Google Analyticsを使う

そもそもこのような用途ではGoogle Analyticsが向いているのではないかと思います。MarketplaceにそれぞれiOSとAndroid用のモジュールが販売されており(アプリ1つにつき$10)、キューに入れたり送信したりするのはモジュール側で面倒をみます。

iOS: https://marketplace.appcelerator.com/apps/926?1914145369
Android: https://marketplace.appcelerator.com/apps/927?1690979897

編集 履歴 (1)
  • ありがとうございます。今回はView数をWeb Appと同期するという目的で使いたかったので、結局 setInterval で10秒毎にイベントを発火させることで対応しました。
    registerBackgroundService 知りませんでした。頭の片隅に置いておきます。
    ありがとうございました!
    -
  • var timer = setInterval(....);
    win.addEventListener('close', function(e){clearInterval(timer);});
    をお忘れなく。
    -
  • 細かい点までアドバイスありがとうございます! -
ウォッチ

この質問への回答やコメントをメールでお知らせします。