カテゴリー : playbook

App Worldへのアプリ登録方法

アプリを作ったらApp Worldに掲載してもらいましょう。

アプリの登録方法を順を追って案内します。

1、App World Distribution にアクセスする。

Black Berry App World Distribution ページにアクセスします。

アクセス後画面中央の黒いボタン「Submit your App or Thema」ボタンをクリックします。

ログインします。

画面内の「manage products」ボタンをクリックします。

これでアプリ管理画面が表示されます。

2、アプリの内容を登録します。

アプリを登録するので「Add Product」ボタンを選択します。

アプリ名、識別ID、アプリの掲載カテゴリ、無料or有料などを入力する。入力できたら「Next」ボタンをクリックします。

アプリの概要説明、詳細説明を記入します。英語以外の解説を増やす場合は「Add Language」ボタンをクリック。入力完了したら「Next」ボタンをクリックします。

アイコン、イメージ画像、スクリーンショットを登録します。

キャリア制限、国の制限を制御できます。特になにもしない場合は「Next」ボタンをクリック。

確認画面です。問題なければ「SAVE」ボタンをクリックします。

3、アプリファイルをアップロードします。

登録したできたアプリのリリース欄の「+」ボタンをクリックしてアプリの権利関係のレポートとアプリファイルをアップロードします。

暗号化関連の説明を記述します。記述したら「Next」ボタンをクリックします。

著作権、外部APIについての許可をレポートします。問題なければ「Next」ボタンをクリックします。

↑ユーザー生成コンテンツが含まれるかどうかを確認します。含まれる場合は未成年に配慮できてるかどうかレポートします。

↑ZIP化したリリースビルドのBARファイルをアップロードします。またバージョンと配信するデバイスを選択します。

↑内容確認画面。問題なければ「SAVE」ボタンをクリックします。

4、レビュー申請してもらう。

内容を書き終わったら忘れずに「Send for Review」を押してください。これを押してはじめてRIMのアプリレビュー担当者がのレビュースタックに登録されて1週間程度で審査結果をメールでもらえます。

5、アプリをリリースする。

上の「Send for Review」と書いてあった場所が「Aprrove」という文字に変わるのでこれをクリックした直後にApp Worldに反映されます。

何らかの不手際があった場合は審査の拒否理由をメールで細かくおしえてくれるので内容にしたがって再登録してください。再レビューしてもらえます。

これでアプリのリリースが完了です。おめでとうございます。

playbook用プロジェックトを作るときの流れ

新しくplaybook用のプロジェクトの作るときの一連の流れをまとめています。

プロジェクトを作るに当たって、

  • Flashbuilderのインストール
  • 証明書のインストール
  • 実機の設定
が出来ていると仮定します。
  1. 新規プロジェクトを作成します。
  2. プロジェクトの設定をします。
  3. blackberry-tablet.xmlを編集します。
  4. コードを記述します。
  5. デバイスに書き出します。

1、新規プロジェクトを作成します。

FlashBuilder4.5を起動します。

メニューから「ファイル→新規」を辿り、「ActionScriptモバイルプロジェクト」か「Flexモバイルプロジェクト」を選択します。ここではActionScriptモバイルプロジェクトを選択して進めていきます。

ダイアログが開くのでプロジェクト名を入力して「次へ」をクリックします。

BlackBerry tablet osにチェックが入っているか確認して「終了」をクリックします。

2、プロジェックトの設定をします。

パッケージエキスプローラから作成したプロジェクト名を右クリックしてプロパティを開きます。

左のメニューから「ActionScript ビルドのパッケージ化→BlackBerry Tablet OS」を選択します。

右側の画面で

・チェックボックス「プラットフォーム固有ライブラリをライブラリパスに追加」

・電子署名タブのチェックボックス「デジタル署名を有効化」

の二つにチェックを入れます。チェックを入れた後「適用」ボタンをクリックします。

次にデバッグの設定を行います。

左側のメニューから「実行/デバッグ設定」を選択し、右画面から「新規」ボタンをクリックします。

開いたダイアログから「モバイルアプリケーション」を選択し、「OK」ボタンを押します。

ターゲットプラットフォームがAIR for iOSになっているのでこれをBlackBerry Tablet OSに変更します。

起動方法でデバイスを選択し、登録したデバイスをプルダウンから選びます。「OK」ボタンをクリックしてます。再度OKを押してプロパティ画面を閉じます。

3、blackberry-tablet.xmlを編集します。

パッケージエキスプローラからプロジェクト内に自動生成されたblackberry-tablet.xmlを開きます。

ほとんど何も書かれていないのでアプリの設定をここに記述していきます。詳細な説明はこちら(英語)

<?xml version="1.0" encoding="UTF-8"?>
<qnx>
   <author>author</author>
   <authorId>authorId</authorId>
</qnx>

authorタグとauthorIdがあれば実機インストールが可能です。

authorとauthorIdは適当な値では動きません。以下の方法でメモしてblackberry-tablet.xmlに反映してください。

(win)FlashBuilderのメニューから[ウィンドウ→設定]

(mac)FlashBuilderのメニューから[FlashBuilder→環境設定]

から環境設定ダイアログを開きます。

左のメニューから[FlashBuilder→ターゲットプラットフォーム→BlackBerry Tablet→署名]を選択します。切り替わった右画面の下段のデバッグトークンの項目から登録済みのトークンを選択するとその右にある詳細ボタンがアクティブになります。詳細ボタンをクリックします。

ダイアログが開くので開いた画面でauthorとauthorIdが確認できます。この2つをblackberry-tablet.xmlに反映します。blackberry-tablet.xmlを保存します。

4、コードを記述します。

とりあえずプレビュー用の適当なコードを記述します。

package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	public class Sample extends Sprite
	{
		public function Sample()
		{
			super();

			// autoOrients をサポート
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			this.graphics.beginFill(0xFF0000);
			this.graphics.drawCircle(200,200,100);
			this.graphics.endFill();
		}
	}
}

5、デバイスに書き出す。

あとはデバッグか実行ボタンをおせば実機でプレビュー出来るはずです。

 
以上で終わりです。無事書き出せましたでしょうか??

playbookを開発する際の実機設定

実機でデバッグを行うための設定を解説します。実機デバッグは無線でのデバッグになるので、開発用マシン、playbook共にwifiで接続してください。

  1. 実機に開発用の設定を行います。
  2. FlashBuiderに実機の情報を登録します。

1、実機に開発用の設定を行います。

1.1 実機にパスワードを設定します。

実機にパスワードを設定します。


画面右上の歯車アイコンをクリックして設定ウィンドウを開きます。


画面左ペインの「Security」メニューを開くと、右側の画面が切り替わります。
Enable Passwordを「ON」に切り替えます。


デバイスに設定するパスワード登録します。
上の画面になればパスワードの設定は完了です。


1.2実機のIPアドレスを調べます。

セッティングから「About」メニューを開きプルダウンから「Network」を開きます。

IPアドレスが表示されるのでIPv4の右に表示されているIPアドレスをメモっておきます。(あとで使う)


1.3 実機にデバッグ用の設定を行います。

セッティング画面から「Security」メニューを選択し、右画面のDevelopment Modeをクリックします。


「use Development Mode」をONにします。


先ほど登録したデバイスパスワードを入力します。


これでDevlopment ModeがONになりました。


1.4デバッグトークンを受け取る待機モードにします。
上の画面の「Upload Debug Token」のボタンをクリックして放置しときます。続いて2へ↓


2、FlashBuilderに実機の情報を登録します。

FlashBuilderの設定画面を開きます。

windows→メニューから「ウィンドウ→設定」

mac→メニューから「FlashBuilder→環境設定」

設定ダイアログが開いたら「FlashBuilder→ターゲットプラットフォーム→BlackBerry Tablet os→テスト用デバイス」を選択します。

まだデバイスが未登録なので、右にある「追加」ボタンをクリックします。

各入力項目に記入していきます。一番下に「デバッグトークンを作成してデバイスにアップロードします」というチェックボックスがあるのでこれにチェックを入れて「OK」ボタンをおします。またデバイスのパスワードを聞かれるので入力すると1分も経たないうちにplaybookにFlashbuilderからデバッグが可能になるデバッグトークンが無線で送られます。

デバイス側は完了すると↑のような画面になります。

Flashbuilder側は↑のような画面になります。

以上でデバイスとFlashBuilderの設定が完了しました。

playbook開発する際のFlashBuilderの署名設定

設定は以下の作業が終わっているものとします。

  • FlashBuilderのインストール、4.5.1へのアップデート
  • SDKのダウンロード
  • PBDT/RDK証明書の準備
次の流れで作業を行います。
  1. 開発者用証明書の作成or選択
  2. RIM署名権限者の登録

1、開発者用証明書の作成/選択

いわゆるp12ファイルを作成します。すでにandroidなどでお持ちの場合は選択するだけの処理です。ここでは持っていないと仮定して作成します。
windowsの場合はFlashBuilder起動後、メニューから[ウィンドウ→設定]をたどります。
Macの場合は、FlashBuilder起動後、メニューから[FlashBuilder→環境設定]をたどります。
環境設定のパネルが開くので、左のメニューから[FlashBuilder→ターゲットプラットフォーム→BlackBerry tablet os →署名]を辿ります。※ターゲットプラットフォームにBlackBerry tablet osがない場合はSDKがインストールされていません。インストールはこちら
署名を選択すると画面右側が切り替わります。
上から順に設定を行っていきます。
ここでは「証明書を作成」をクリックします。
新しくダイアログボックスが開くので内容を記入します。
これで自己証明p12の作成が完了です。

2、RIM署名権限者の登録

次はRIM署名を登録します。赤枠内の「登録」ボタンをクリックします。
登録ボタンを開くと新しくダイアログが開くので前もって用意していたPBDT/RDKファイルを選択します。
また、登録時に入力したパスワードも記入します。すべて記入したらOKボタン押すと、RIMのサーバーへ登録作業が行われます。
登録が完了すると、登録済み表示になります。
↑のような感じになるとOKです。

playbookの開発環境(準備編:SDKを用意する)

必要なものがある程度揃ってきたところで開発環境を整えていきます。

AppWorld以外にSDKをダウンロードするためにDeveloperZoneというサイトにまたIDとパスワード登録しなければいけません。一緒のIDでダウンロードできるようにしてくれよと思いますがもう作業だと思ってやりとげます。


1、DeveloperZoneへアクセスします。

最初にアクセスしたときはID/PASSがないので画像内赤枠の「Not a BlackBerry Developer Zone Member?」と書かれたテキストリンクをクリックします。


2、フォームに内容を書き込む

内容を入力したら「Next」ボタンをおすと、確認画面が出現するので、submitを押して登録完了です。
あとで登録完了メールが来るのでそれを確認します。


3、登録完了後、SDKのダウンロードページに移動します。

ダウンロードページはこちら
中段あたりにSDKダウンロードURLがwinとmacでそれぞれ分かれているので欲しい方をクリックします。
さっきのログイン画面がでてくるので登録した内容を入力してログインします。
ログインが完了すると晴れてダウンロードページに。


ダウンロードしたらインストールして完了です。

playbookのコードサイニングの申請方法

playbook開発において必要な証明書が3つあります。すでにここで混乱しそうですが。。。

以下の3つの証明書を取得できれば実機でのデバッグやプレビューが可能になります。

  • p12証明書 … 開発者用の証明書、FlashBuilder上で自作できます。
  • client-PBDT.csj … 実機へのアプリインストール用の証明書。RIMへ申請してもらいます。
  • client-RDK.csj … 実機へのアプリインストール用の証明書。RIMへ申請してもらいます。
p12証明書は自作できるので、ここではPBDT/RDK証明書の申請方法を紹介します。
申請はWEB上のフォームから申請手続をおこない、何日か後にメールで証明書が送られてきます。


1,申請フォームにアクセスして証明書の申請手続きを行う。
詳細は上の画像に書きこんでありますのでご参照ください。フォーム内容を確認して画面下部の「Next」ボタンをクリックします。
内容確認画面に遷移するので内容確認して「Submit」を押します。
このあと、体感1,2日後(土日は多分送られてこない)にPBDT/RDKの2つの証明書が送られてきます。


2、メール添付で送られてきた証明書を取り出します。
申請が受理されると証明書が添付されたメールが送られてきます。ここで注意が必要なのですが、メールは同じ件名で2通送られてきて、件名本文は全く同じ内容ですが添付されているファイルがそれぞれ異なっています。メール1通につき、RDK,PBDTの証明書が添付されているので「同じメールが2通おくられてきた」と勘違いしないように注意してください。
これで証明書の取得は完了です。
いまのところ(2011/7現在)証明書の発行は無料でした。

BlackBerry App World(android marketのRIM版)への登録手順について

※いまのところAppWorldの登録は無料で行えます。

playbook用のアプリリリース用のアカウントを作るための手順を案内したいと思います。playbookのアプリストアはApp Worldと呼ばれています。以後、App Worldと呼びます。App Worldに登録すると、実機でのデバッグやストアにアプリを出せるようになります。とりあえず登録しなければ何も始まりません。また、この作業は申請してから数日時間がかかるので最初にやっておいたほうが開発を早く始めることができます。

手元に準備するもの

  • paypalのアカウント
  • 日本政府が発行している氏名と生年月日がわかる証明書のコピー(自分はパスポートでいけました。たぶんRegistしてる方が日本語読めないと思うのでパスポートが安心かと思われます。)

登録手順

・まずこちらのログインページに移動します。https://appworld.blackberry.com/isvportal/home/login.seam?pageIndex=1

画面中央右のログインパネルの中の青色のボタンの下に「sign up」という文字があるのでこちらをクリックします。

・あとは画面の内容に沿ってチェックボックスやラジオボタンに入力しながら画面を進めていきます。

※きちんとスクロールして読まないとチェックボックスがアクティブにならないような仕掛けになってます。全部で3段ほど規約内容があり、全て読んだ後チェックボックスにチェックをいれていきます。最後のチェックを入れて画面最下部のnextボタンをクリックします。漏れがあるとnextボタンは非アクティブになっているかと思われます。

・メールアドレス、氏名、電話番号、ログイン用のパスワードを入力します。

全部入力したらnextボタンをクリック。

・販売用アカウントの情報を入力します。

アプリの売買をおこなうアカウント名Vender nameを決めてください。その他所在地やサポート用のメールアドレスなど一式を入力します。

・paypalのアカウントと関連付けを行います。

アプリの売上や、Vendarportalの登録費用などをpaypalで決済するものと思われます。画面中央のPayPalロゴをクリックします。paypalにログインして小額を振込み領収書に登録用のPINが付いてきます。このPINを左画面の下段のテキストフォームに入力してnextボタンを押します。あとは流れに沿ってフォームを完了させます。

・このあと、何日かして本人確認の電話が国際電話でかかってきました。最初意味がわからなかったのでYESと連発してて、あとでこれがそうだったのか?と気づきました。本人確認が完了するまでは登録したメールアドレスでログインすることができませんでした。(これがわからず、本人確認前になんどもパスワードの再発行をやっていました。。。。)

次はコードサイニングの発行です。

playbook用のアプリ開発に必要なもの

全く需要のないplaybookアプリ開発連載第一弾 準備編 を書いていきます。

playbookアプリ開発においてとりあえず必要なものをリストアップしていきます。

開発に当たって必要な物

  • 開発用マシン(win or mac)
  • Adobe Flash Builder4.5.1(4.5の人は必ずUPDATEしてください)
  • playbook実機(エミュレータでもいいけどあんまり使いものにならない)
  • paypalアカウント(アプリ売るとき用の口座 free版しか出さなくても必要)
  • パスポートのスキャン画像
以上がとりあえず必要な物一覧です。



開発用マシン
win,macどちらででも開発できます。マルチスクリーン向けにやるならmacで統一したら便利です。
androidはデバイスのインストールがいらないし、AIR for iOSはmacでしかアプリのインストールができないので。


Adobe FlashBuilder4.5.1
ほかのエディタでも開発可能ですが、アプリを実機にインストールしたり、デバッグするならいまのところ一番便利なのはFlashBuilder4.5.1だと思います。4.5はplaybook用の書き出しが最適化されていないのでちょっとマニアックな設定をしなければいけません。かならず4.5.1へアップデートしてください。


playbook実機
ここが難関で、playbookは2011/7月時点で日本未発売端末です。でも通販など入手手段はいくつか確保されていますのでいくつか入手手段をご紹介します。(※日本語入力もできません。)
expansys … ここが一番確実かもしれません。価格も良心的です。
amazon … アマゾンでも売ってるところがありました。


paypalアカウント
AppWoldに登録する際にpaypalアカウントが必要です。こちらから


パスポートの写し
App World登録時に必要です。


次はデベロッパー登録です。

QRCodeReader for Playbook をリリースしました。(ソース付き)

BlackBerry playbook向けに QR Code Reader for Playbook をリリースしました。

http://appworld.blackberry.com/webstore/content/49210?lang=en

このアプリはver1~10(セルサイズが1~10)までのQRコードを読み取ってくれるものです。

開発してて気がついたことがありました。androidやiOSではCamera.getCamera()を呼び出したとき背面カメラが返されますが、playbookでは前面カメラが呼び出されます。
playbookで背面カメラを参照する場合はCamera.getCamera(“1”)と記述しなければいけません。

ロゴスソフトウェアさんのライブラリがGPLライセンスなのでソースコードとプロジェクトファイルをここからダウンロードできるようにしています。
QRCoderReader.as

package
{

	import com.logosware.event.QRdecoderEvent;
	import com.logosware.event.QRreaderEvent;
	import com.logosware.utils.QRcode.GetQRimage;
	import com.logosware.utils.QRcode.QRdecode;

	import flash.desktop.Clipboard;
	import flash.desktop.ClipboardFormats;
	import flash.desktop.NativeApplication;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.TimerEvent;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.media.Camera;
	import flash.media.Sound;
	import flash.media.Video;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.text.TextField;
	import flash.text.TextFormat;
	import flash.utils.Timer;

	import qnx.ui.buttons.LabelButton;

	import caurina.transitions.Tweener;

	[SWF(height="600", width="1024", frameRate="30", backgroundColor="#FFFFFF")]
	public class QRCodeReader extends Sprite
	{

		private var msg:TextField;
		private var btnSendBrowser:LabelButton;
		private var btnCopy:LabelButton;
		private var qrImage:GetQRimage;
		private var qrDecode:QRdecode;
		private var timer:Timer;
		private var bmptemp:BitmapData;
		private var sf:Sound;
		private var qrresult:Object;
		private var video:Video;
		private var bmp:Bitmap;
		private var marker:Sprite;

		public function QRCodeReader()
		{
			super();
			objectInitialize();
		}

		private function objectInitialize():void
		{
			//ステージ設定
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;

			//background
			var loader:Loader = new Loader();
			loader.load(new URLRequest("assets/bg.png"));
			addChild(loader);

			//サウンド
			sf = new Sound();
			sf.load(new URLRequest("assets/sf.mp3"));

			//camera
			if (Camera.isSupported) {
				//カメラをゲット
				var camera:Camera

				camera = Camera.getCamera("1");
				//if(camera)camera = Camera.getCamera("0");
				//カメラの解像度のキャプチャの更新頻度(fps)を設定(w,h,fps)
				camera.setMode(400, 400, 10);
				//表示用のビデオを作成
				video = new Video(400, 400);
				//ビデオとカメラを関連付ける
				video.attachCamera(camera);
				addChild(video);
				video.x = 50;
				video.y = 130;

				//デコード用ビットマップ(キャプチャしたQR写真)
				bmp = new Bitmap();
				bmp.bitmapData = new BitmapData(200,200);
				bmptemp = new BitmapData(200,200,false,0xFFFFFF);

				//デコード用インスタンス
				qrImage = new GetQRimage(bmp);
				qrImage.addEventListener(QRreaderEvent.QR_IMAGE_READ_COMPLETE,onQRReadComp);

				//スキャン頻度
				timer = new Timer(1500);
				timer.addEventListener(TimerEvent.TIMER,onTimer);
				timer.start();

			}

			//カメラ用マスク
			var camMask:Loader = new Loader();
			camMask.load(new URLRequest("assets/cammask.png"));
			camMask.x = 50;
			camMask.y = 130;
			addChild(camMask);

			//textfield
			var tf:TextFormat = new TextFormat();
			tf.font = "_ゴシック";
			tf.size = 24;

			msg = new TextField();
			msg.defaultTextFormat =tf;
			msg.selectable = true;
			msg.multiline = true;
			msg.wordWrap = true;
			msg.width = 405;
			msg.height = 84;
			msg.x = 560;
			msg.y = 143;
			addChild(msg);

			//btn copy
			btnCopy = new LabelButton();
			btnCopy.label ="Copy Message";
			btnCopy.width = 430;
			btnCopy.x = 545;
			btnCopy.y = 270;
			btnCopy.addEventListener(MouseEvent.CLICK,onbtnCopy);
			addChild(btnCopy);
			btnCopy.enabled = false;

			//btn sendBrowser
			btnSendBrowser = new LabelButton();
			btnSendBrowser.label = "Search in Browser";
			btnSendBrowser.width = 430;
			btnSendBrowser.x = 545;
			btnSendBrowser.y = 340;
			btnSendBrowser.addEventListener(MouseEvent.CLICK,onSendBrowser);
			addChild(btnSendBrowser);
			btnSendBrowser.enabled = false;

			//marker
			marker = new Sprite();
			marker.graphics.beginFill(0xFF0000);
			marker.graphics.drawCircle(5,5,5);
			marker.graphics.endFill();
			marker.x = 52;
			marker.y = 132;
			marker.alpha = 0;
			addChild(marker);

		}

		//タイマー実行時のイベントリスナー
		private function onTimer(e:TimerEvent):void{

			//キャプチャ用のビットマップ生成
			var bmptemp2:BitmapData = new BitmapData(400,400,false,0x000000);
			//カメラから映像キャプチャ
			bmptemp2.draw(video);
			//小さいビットマップに映像キャプチャし直す。
			bmptemp.copyPixels(bmptemp2,new Rectangle(100,100,200,200),new Point(0,0));
			bmp.bitmapData = bmptemp;
			bmptemp2.dispose();

			qrImage.process();

			marker.alpha = 1;
			Tweener.addTween(marker,{alpha:0,time:1});
		}

		//QRコードが認識されたら↓が実行される
		private function onQRReadComp(event:QRreaderEvent):void
		{

			qrDecode = new QRdecode();
			qrDecode.setQR(event.data);
			qrDecode.addEventListener(QRdecoderEvent.QR_DECODE_COMPLETE,onDecodeComp);
			qrDecode.startDecode();

		}
		//デコード完了時に↓が実行される
		private function onDecodeComp(event:QRdecoderEvent):void
		{

			//読み取り効果音再生
			sf.play();
			//読み取りデータの表示
			msg.text = event.data;

			//ボタンのアクティブ化
			btnSendBrowser.enabled = true;
			btnCopy.enabled = true;

			//読み取りデータの中にURLが含まれているか確認する
			if(qrresult) qrresult = null;
			var urlReg:RegExp = /[^"|^>](http:\/\/+[\S]*)/;
			qrresult = urlReg.exec(" "+msg.text);
		}

		//COPYボタンが押されたときのクリップボードに読み取りデータをコピーする
		private function onbtnCopy (e:MouseEvent):void{
			var cb:Clipboard = Clipboard.generalClipboard;
			cb.setData(ClipboardFormats.TEXT_FORMAT,msg.text);
		}

		//ブラウザに送るボタンを押したときURLが含まれているとき、含まれていない時で処理分岐
		//URLが含まれている場合はURL抽出してアクセス、含まれない場合はグーグルで検索
		private function onSendBrowser(e:MouseEvent):void{
			if(qrresult){
				navigateToURL(new URLRequest(qrresult[1]));
			}else{
				var urlstr:String = "http://www.google.com/search?q=" + msg.text;
				navigateToURL(new URLRequest(urlstr));
			}
		}
	}
}

papervision3dをMultitouch対応にさせる方法

スマートフォンやタブレットでもpapervision3dが使えます。モバイル向けではないので、時間が経てばMolehillとかもっと軽い3Dライブラリがでてくるかもしれません。そこまで重くない処理させるのであれば、メジャーなpapervisionでもサクサク動きます。

スマトーフォンの場合、マルチタッチに対応しているので自然とpapervisionで構成された画面作るならこれに対応させたいところです。

ただ、画面が小さいので各オブジェクト毎にイベントリスナーをつけるっていうのはかなり非現実的なのでstageにイベントリスナーを追加して固定オブジェクトだけ操作するのがいいのでは?と思いました。

以下AIR for Android/AIR for iOS用のサンプルです。

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TransformGestureEvent;
	import flash.ui.Multitouch;
	import flash.ui.MultitouchInputMode;

	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.view.BasicView;

	public class pv3d_multitouch extends Sprite
	{
		public var stagew:int;
		public var stageh:int;
		private var basicview:BasicView;
		private var cube:Cube;
		private var yaw:Number = 0;

		public function pv3d_multitouch()
		{
			this.addEventListener(Event.ADDED_TO_STAGE,onInit);
		}

		protected function onInit(event:Event):void
		{

			//stage設定
			stagew = stage.stageWidth;
			stageh = stage.stageHeight;

			//basicviewの生成
			basicview = new BasicView(stagew,stageh);
			addChild(basicview);

			//cubeの生成
			var material:ColorMaterial = new ColorMaterial(0x888888);
			cube = new Cube(new MaterialsList({all : material}),300,300,300);
			basicview.scene.addChild(cube);

			if(Multitouch.supportsGestureEvents){
				//マルチタッチの宣言
				Multitouch.inputMode = MultitouchInputMode.GESTURE;
				stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM,onBasicViewZoom);
				stage.addEventListener(TransformGestureEvent.GESTURE_ROTATE,onBasicViewRotate);
			}

			basicview.startRendering();
		}

		protected function onBasicViewZoom(event:TransformGestureEvent):void
		{
			cube.scale *= event.scaleX;

		}
		protected function onBasicViewRotate(event:TransformGestureEvent):void
		{
			yaw += (event.rotation)/20;
			cube.yaw(yaw);
		}
	}
}

2011/7/8 追記

当初マルチタッチのイベントリスナーをbasicviewに登録していましたがiOSで動作しなかったのでstageにイベントを登録しなおしたら動きました。