ぼくはまちちゃん!(Hatena)

  • ライブドアリーダーで読む → Subscribe with livedoor Reader
ぼくはまちちゃん!のRSSフィード

2009/01/18

AIRアプリケーションを公開するためのメモ

こんにちはこんにちは!
AIRアプリは完成しましたか!

はい! 前回の日記のつづきなんです…!
(JavaScriptでかんたんAIRアプリに挑戦)

ぼくはもうすぐ、なにか完成しちゃいそうな感じですよ!

でも、その前に…完成したやつを公開する為の手順が必要ですよね!
なんかちょっとややこしそうななので、これもメモしときます!

今回は自分用メモみたいな感じで、わりといいかげんなんだけど、参考になれば…!


はい!

完成したAIRアプリを公開するためには.airファイルにする必要があるよ。
.airファイルになるとインストーラ付きのパッケージになって、ダブルクリックで起動できるようになって嬉しいね。


アプリとしての体裁を整える

やっぱり世間体も大事です!
アイコンとかも、ちょっといいやつつくっておこう。

AIRアプリ設定用xmlの中の<application>に以下を追記したよ。

<programMenuFolder>test1</programMenuFolder>
<icon>
	<image16x16>icons/test16.png</image16x16>
	<image32x32>icons/test32.png</image32x32>
	<image48x48>icons/test48.png</image48x48>
	<image128x128>icons/test128.png</image128x128>
</icon>

それに合わせて、アイコンも4種類つくったよ。

programMenuFolder っていうのは、インストールの時スタートメニューにフォルダを作るかどうかってやつかな。
もちろんこっちはWindowsだけに効く設定だよ。


airファイルをつくるためには証明書が必要

なので、オレオレ証明書をつくるよ。
コマンドプロンプトで作業ディレクトリに移動して adt コマンドっていうのを使うよ。

C:\home\AIR\test1>adt -certificate -cn hmcysign 1024-RSA hmcy.pfx password

hymcysign」はオレオレ証明書の名前。適当でいいよ。
hmcy.pfx」は証明書のファイル名。適当でいいよ。
password」は証明書のパスワード。適当でいいよ。

でもぼくはこの時、なんかJavaのなにかが足りないってエラーがでたよ。なにこれ。

Error: could not open `C:\Program Files\Java\jre1.6.0_03\lib\i386\jvm.cfg'

なので Java をダウンロードしてきてインストールしなおしたよ。
そしたらちゃんとできた。


.airファイルの作成。

C:\home\AIR\test1>adt -package -storetype pkcs12 -keystore hmcy.pfx -storepass password test1.air test1.xml test1.html AIRAliases.js

環境に合わせて変更するのは以下の感じだよ。

hmcy.pfx」 ... さっき作ったオレオレ証明書
password」 ... 証明書のパスワード
test1.air」 ... 作りたい.airファイル名
test1.xml」 ... 作ったAIRの設定用xmlファイル
test1.html」 ... ここから後は必要なhtmlとかjsとか必要なファイルを並べる。画像用のサブディレクトリなんかを指定してもいいね(その場合は配下ファイルまで指定しなくていいよ)

運が良ければこれで.airファイルが完成するよ。
できあがったら test1.air をダブルクリックしてみようね。
AIRアプリのインストーラー、起動したかな?

  • ちゃんと動くか
  • ちゃんとしたディレクトリにインストールされたか
  • アイコン類がかっこいい感じに表示されてるか
  • コントロールパネルの「プログラムの削除」から、ちゃんとアンインストールできるか

などなどをチェックだよ。


インストールページ(Badge)の作成

Webページからワンクリックで詐欺みたいにAIRアプリをインストールできる「Badge」ってやつをつくってみるよ。

適当にBadge用の作業ディレクトリをつくる。
Adobe から Badgeのサンプルをダウンロード

Badge作業ディレクトリに、サンプルの中の3つのファイルをコピー

  • AIRInstallBadge.swf
  • expressinstall.swf
  • swfobject.js

サンプルを参考にして、新しくhtmlファイルをつくる。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>test1 Installer</title>
	<style type="text/css">
	* {
		margin: 0;
		padding: 0;
	}

	body {
		background: #fff;
	}

	#flash {
		width: 215px;
		height: 180px;
	}
	</style>
	<!-- SWFObject embed by Geoff Stearns geoff@deconcept.com http://blog.deconcept.com/swfobject/ -->
	<script type="text/javascript" src="swfobject.js"></script>
</head>

<body>
	<div id="flash">
		<strong>Please upgrade your Flash Player</strong>
		This is the content that would be shown if the user does not have Flash Player 6.0.65 or higher installed.
	</div>

	<script type="text/javascript">
		// version 9.0.115 or greater is required for launching AIR apps.
		var so = new SWFObject("AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
		so.useExpressInstall('expressinstall.swf');

		so.addVariable("airversion", "1.0");
		so.addVariable("appname", "test1\n");
		so.addVariable("appurl", "http://www.mysite.com/sampleApp.air");

		so.addVariable("appid", "Hamachiya2.test1");
		so.addVariable("pubid", "");

		so.addVariable("appversion", "0.5"); // AIR application version

		// these parameters are optional:
		so.addVariable("imageurl", "demoImage.jpg"); // URL for an image (JPG, PNG, GIF) or SWF to display in the badge (205px wide, 170px high)
		so.addVariable("appinstallarg", "installed from web"); // passed to the application when it is installed from the badge
		so.addVariable("applauncharg", "launched from web"); // passed to the application when it is launched from the badge
		// so.addVariable("helpurl", "help.html"); // optional url to a page containing additional help, displayed in the badge's help screen
		so.addVariable("hidehelp", "true"); // hides the help icon if "true"
		so.addVariable("skiptransition", "false"); // skips the initial transition if "true"
		so.addVariable("titlecolor", "#AAAAAA"); // changes the color of titles
		so.addVariable("buttonlabelcolor", "#FF0000"); // changes the color of the button label
		so.addVariable("appnamecolor", "#99CCFF"); // changes the color of the application name if the image is not specified or loaded

		// these parameters allow you to override the default text in the badge:
		so.addVariable("str_err_airswf", "<u>Running locally?</u><br/><br/>The AIR proxy swf won't load properly when this demo is run from the local file system."); // overrides the error text when the AIR proxy swf fails to load

		so.write("flash");
	</script>
</body>
</html>

このhtmlをブラウザで表示して、ちゃんとブラウザからインストールできるかテストしようね。

はてなダイアリーじゃない人はここまででokだよ。


はてなダイアリーにBadgeを貼れるようにする

はてなダイアリーは JavaScript とか Flash がつかえないから、そのままじゃ Badge を貼れないよ。
だから、ぼくが前に書いた「はてなダイアリーに(対応外の)ブログパーツを貼る - ぼくはまちちゃん!(Hatena)」を参考にして、ブログパーツとして貼り付けるよ。

必要なファイルを Google Page Creator にアップロード。

  • AIRInstallBadge.swf
  • expressinstall.swf
  • swfobject.js
  • test1.air

さっきの html を google ガジェット用の xml に書き換えるよ。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs title="test1 installer">
  </ModulePrefs>
  <Content type="html">
     <![CDATA[

	<style type="text/css">
	* {
		margin: 0;
		padding: 0;
	}

	body {
		background: #fff;
	}

	#flash {
		width: 215px;
		height: 180px;
	}
	</style>
	<!-- SWFObject embed by Geoff Stearns geoff@deconcept.com http://blog.deconcept.com/swfobject/ -->
	<script type="text/javascript" src="http://hamachiya2.googlepages.com/swfobject.js"></script>

	<div id="flash">
		<strong>Please upgrade your Flash Player</strong><br />
		This is the content that would be shown if the user does not have Flash Player 6.0.65 or higher installed.<br />
		<strong><a href="http://get.adobe.com/jp/flashplayer/" target="_blank">Get Flash Player</a>.</strong>
	</div>

	<script type="text/javascript">
		// version 9.0.115 or greater is required for launching AIR apps.
		var so = new SWFObject("http://hamachiya2.googlepages.com/AIRInstallBadge.swf", "Badge", "215", "180", "9.0.115", "#FFFFFF");
		so.useExpressInstall('http://hamachiya2.googlepages.com/expressinstall.swf');

		so.addVariable("airversion", "1.0");
		so.addVariable("appname", "tet1\n");
		so.addVariable("appurl", "http://hamachiya2.googlepages.com/test1.air");

		so.addVariable("appid", "Hamachiya2.test1");
		so.addVariable("pubid", "");

		so.addVariable("appversion", "0.5"); // AIR application version

		// these parameters are optional:
		// so.addVariable("imageurl", "test1.png"); // URL for an image (JPG, PNG, GIF) or SWF to display in the badge (205px wide, 170px high)
		so.addVariable("appinstallarg", "installed from web"); // passed to the application when it is installed from the badge
		so.addVariable("applauncharg", "launched from web"); // passed to the application when it is launched from the badge
		// so.addVariable("helpurl", "help.html"); // optional url to a page containing additional help, displayed in the badge's help screen
		so.addVariable("hidehelp", "true"); // hides the help icon if "true"
		so.addVariable("skiptransition", "false"); // skips the initial transition if "true"
		so.addVariable("titlecolor", "#AAAAAA"); // changes the color of titles
		so.addVariable("buttonlabelcolor", "#FF0000"); // changes the color of the button label
		so.addVariable("appnamecolor", "#99CCFF"); // changes the color of the application name if the image is not specified or loaded

		// these parameters allow you to override the default text in the badge:
		so.addVariable("str_err_airswf", "<u>Running locally?</u><br/><br/>The AIR proxy swf won't load properly when this demo is run from the local file system."); // overrides the error text when the AIR proxy swf fails to load

		so.write("flash");
	</script>

     ]]>
  </Content>
</Module>

ファイルを指定してるところは相対パスじゃなくて url になおしたよ。

で、これを test1_installer.xml としてアップロードして…

http://www.gmodules.com/ig/creator?synd=open&url=http://hamachiya2.googlepages.com/test1_installer.xml

↑ここのページで Googleガジェットとしての Badgeのテストと調整するよ。
うまくいってそうな感じなら「コードを取得」ボタンで、貼り付け用コード(script)をゲットしようね。

最後にそのコードを、そのままはてなダイアリーに貼り付ければ完成かな!

実際にはてなダイアリー上でBadgeが動いてるサンプルは、
次の日記「tPod - tumblrのダッシュボードに流れる画像を眺めるガジェット」をみてね!


(関連記事)
JavaScriptでかんたんAIRアプリに挑戦 - ぼくはまちちゃん!(Hatena)
tPod - tumblrのダッシュボードに流れる画像を眺めるガジェット - ぼくはまちちゃん!(Hatena)