2016年12月28日水曜日

ELECOM VRグラス P-VRG03 シリーズのレビュー【スマホ用 VR ゴーグル】

メガネ着用可でピント調節、レンズ間隔調節も可能な一見するとまさに理想的な VR ゴーグルなのですが、使ってみて気がついたことがあるので、まとめてみました。

※公式には、眼鏡を装着した状態での使用はできない、となっているので眼鏡によっては合わないかもしれません。

ダンボール製 VR メガネとは一線を画する雰囲気w

お値段は約3,000円。
正直、2,000円以下で同程度のスペックをもつ VR ゴーグルやメガネもあるので多少お高いと言わざるを得ません。
しかし、店頭で使い比べてみると、目の幅や視力に合わせて調節できる機能、小ぶりな眼鏡なら着用可能なスペース、しっかりとホールドされるスマホ、そして広角で歪みの少ない大型のレンズ、とやはりハコスコや Cardboard のような安価なメガネタイプとは一線を画する使いやすさを感じたので購入してみました。

なかなか充実した機能!
[クリックで拡大]
箱の中身は全部でこんな感じ。

本体と取説(ペライチ)と黒いのは遮光シート
そして特筆すべきはこの底上げ力!( ゚∀゚)

箱の約半分は底上げですw
なんでこんなことしたんでしょうか……
まだ下に何か入ってるのかと期待してしまいましたよ。

まぁ冗談はさておき、いざ実際に使い始めたところ、ある重要な欠点に気が付きました!
それは……





セットしたスマホが操作できねー(爆)





おーまいがぁー、店頭では取っ替え引っ替えしていたので気が付きませんでしたが、一度セットすると画面をタッチするすべがありません;
ハコスコのようにタッチ用の穴が開いてるわけでも、Cardboard のようにマグネット式のボタンがついてるわけでもありません。
そのため、例えば動画を見ようとした場合……
  1. ゴーグルにスマホを仮乗せ(まだ固定しない)
  2. 動画の再生ポチィー
  3. 急いでスマホを固定
  4. さらに急いでヘッドにマウント
という手順になりますナンダコレ。

これだと視点合わせで決定する機能を持つアプリしか快適に使用できません。
それ以外の点には満足しているだけに、この欠点は大きすぎます。

つまりエレコムさん的には、こいつも一緒に買っとけよ!っということなのでしょう。



オノレ ELECOM ハメヤガッタナ(泣)
まぁ買う前に気が付けって話ですね。

ちなみに上記商品、iPhone では動画の再生とか停止のコントロールくらいしかできないのでご注意ください。
android 使っててお金に余裕のある方は買ったらいいんじゃないっすかねハナホジ。

とりあえず、私は本体に穴開けてタッチできる仕組みを組み込めないか思案中ですw
もし成功したら追記します。期待しないでください。

[2017年8月8日いまさら追記]
穴あけではありませんが、android 端末であれば USB 変換アダプターを利用してマウスをつなげれば大方の問題は解決します。
USB 変換アダプターは百均でも売っているので、安価に解決したい方にはおすすめです。

↓こういうやつね。

[追記ここまで]

今回ご紹介した商品はこちら。この記事から買うやついないだろうけどな!



Cardboard やハコスコなどのビューア設定を初期状態に戻す方法

Cardboard はビューア(VR ゴーグル)の QRコードを読み込むだけで設定できるので便利なのですが、『やっぱり最初の状態に戻したい』なんてことも少なくありません。私はw

しかし困ったことにデフォルト(初期状態)に戻す方法が Cardboard には用意されていないようです。
まー、まだ Cardboard 程度なら一度消して再インストールすれば初期化できますが、YouTube アプリなどは面倒くさくてそうもいきません。

そこで初期化用のプロファイル QRコードを用意してみました。
iPhone 5系(s c SE)が対象ですが、iPhone 6 Pro でも最初に近い状態に戻りました。
android などでも利用できるかもしれません。

Unofficial Default for iPhone5

なお、目分量で初期状態を再現したものにすぎないため、完璧に初期化されるわけではないのでご注意ください。

2016年12月26日月曜日

iPhone で VR (YouTube・Cardboard )がずれる場合の対処法(android もOK)

最初 iPhone5s でこんな感じ↓に表示され、おいおいズレまくりやないかーい!と思い、色々と解決方法を探ってみました。

キツネさんがおらん……

ビューア(VR ゴーグル)で見ても映像が二重に見えてしまうという方は、以下の方法を試してみてください。

解決策その1:ビューアの QR コードを利用する

あまりにも基本的なことなので、スマホで VR やりたいとか思う人には説明不要かと思いますが、Google Cardboard の仕様に準拠しているビューアなら取説とか本体とかに設定用の QR コードがあるはずなので、そいつを YouTube やら Cardboard やらのアプリ内の設定(歯車マーク)の「ビューアを切り替える」から読み込ませることで、そのビューアに合わせた表示になってくれます。ふつうはw

こんな感じのやつネ

つーか「こんなことで解決するなら検索しねーよ」という方がほとんどでしょうからサッサと次の考えられる原因とその解決法に進みましょう。

なお、そもそも QR コードなんてない、もしくは無くした、という場合は、このページが便利です。

HYPERGRID BUSINESS の VR ヘッドセット QR コード一覧ページ

オフィシャルからアンオフィシャルな QR コードまで色々あるので、頑張っていい感じのを見つけ出せばいいと思います。
すげーたくさんあるけどがんばれ。

ちなみに、日本で最も広く利用されているであろうハコスコにはオフィシャルな QR コードはないので注意。
つーか、なんでないの?用意しとこうよ。

参考:
Cardboard やハコスコのビューア設定を初期状態に戻す方法

解決策その2:慣れるwww

いや真面目な話、これで解決する場合も多いです。
映像が二重に見えてしまうのは単に目が慣れていない(遠くを見ようとしていない)ことが原因であることも少なくありません。

とは言え、人によっては本当に合っていない場合もあるので、少し慣らしてみたけどやっぱ改善しないという方は、次の方法をお試しください。

補足:
実は冒頭のキツネさん画像も異常にズレているわけではないのです。
ビューアを通すことで↓下図のように見えるのです。


構造上、有効に利用できる画面の範囲は意外と狭く、特に iPhone5 などの画面が小さいスマホほど、この問題はより顕著になります。

解決策その3:自分に合った QRコード(プロファイル)を作成する

正直最も確実でおすすめな方法は、これだと思います。
メーカーが用意した QR コードはあくまで、そのビューアと推奨するスマホでいい具合に見える平均的な設定を行なってくれるだけで、個人の視力や瞳の間隔やらは考慮してくれません。

全部中心で揃ってるのが理想
たとえビューアにレンズ間隔やピント調節機能が付いていても、画面表示もそれに合わせて変更されなければ最適な環境にはできないのです。


そこで、自分にあった設定を記録した QR コードを作成する必要があります。
といっても特に難しいことはありません。
PC ブラウザで下記URLにアクセスし、スマホの画面を見ながら設定するだけです。

ビューア プロフィール生成ツール(え い ご w)

このサイトでは、左右の映像の位置や画角の調整、レンズの歪みの修正などをおこなうことができ、その設定を QR コードとして出力することができます。
つまり自分用のプロファイルの QR コードが作成できます。

極端な変更例ですが、中心点や画角、歪みの修正をおこなうとこんな感じ
どちらも角に視点を合わせていますが、これだけの違いが出ます。
ただしこのプロファイルが有効なのは Google Cardboard SDK を利用して制作されたアプリのみなので注意です。(まぁたいていのアプリはこれ使ってます)

ビューア プロフィール生成ツールの使い方

一見難しそうですが、やってみると簡単です。英語わからなくたってOKです。

1.まずは PC ブラウザでページにアクセス!

スマホじゃだめだよ PC だよ。え?PC ない?m9(^Д^)プギャー

2.今度はスマホでそのページにある QR コード読んでページにアクセス!

なんとこれだけで PC 側で設定変更するとスマホ側で表示の変化を即確認できるようになります!
※スマホを横向きにすると、表示を確認できるようになります。
※早ければ1秒程度で反映されますが、遅い時は数十秒かかります。

なお、もしかしたらこの時にスマホの PPI を入れろとメッセージが出るかもしれません。
お手元のスマホの PPI をググって入力してください。(数値だけ入れればOK)

iPhone の PPI は以下のとおりです。
iPhone 5 326 ppi iPhone 6 326 ppi iPhone 7 326 ppi
iPhone 5c 326 ppi iPhone 6 Plus 401 ppi iPhone 7 Plus 401 ppi
iPhone 5s 326 ppi iPhone 6s 326 ppi
iPhone SE 326 ppi iPhone 6s Plus 401 ppi

3.PC ページの下の方に、色々な設定項目があるので、いい感じにいじるw

Your Company ホントはメーカー名を入れるとこだけど、作者名でも入れておけばいいと思うよ。
ちなみに未記入でも OK です。
Viewer Name ビューアの名前。っていうかプロファイルの名前。
これは分かりやすい名前を入力しておくことをおすすめします。
Primary button type ビューアにどんなタッチ操作機能がついているかを選択します。
None:タッチ操作できない
Touch:指で画面に触れられる
Indirect Touch:マウスとかコントローラでタッチ操作できる
Magnet:Cardboard のように磁石式のボタンがある
Screen to lens distance (mm) 画面とレンズの間の平均距離。
画角などにも影響するので、正確な距離を入力してもいいけど、好みで調整してもいいと思う。
Inter-lens distance (mm) レンズの間隔。ビューア側でも調節できるなら自分の瞳の間隔。
疲れやすさ酔いやすさにも影響するので超絶重要!
だいたい子供は55mmくらいからで大人は65mmという人もいる。
ビューアを覗いて調整する時は、必ず遠くを見る感覚で両目の赤い点が重なるよう調整すること。
寄り目の状態で調整しても意味ないので注意!
Screen vertical alignment ビューアにスマホが、垂直方向にどう装着されるかを選択。
Bottom:下にそろえて装着
Center:まんなかに合わせて装着
Top:上部に合わせて装着
Center を選択しがちだが、多くのビューアは Bottom で作られているぞ。
つまりこういうことだ↓


しかしできるだけ画面は大きく使いたいもの。
特に画面の小さいスマホでは、装着しにくさを犠牲にしてでも画面を最大限に利用できる Center を選択するのもあり!
Tray to lens-center distance (mm) Bottom か Top を選択すると出てくる項目。
ガイドからレンズの中心までの距離を入れるところだけど、これは実際にビューアを覗いて真正面に赤い点が来るように調整するのがベストでしょう。
Distortion coefficients レンズの歪みを調整できるよ。
これも実際にビューアを覗いて調整することをおすすめします。
できるだけ垂直線がまっすぐになるよう調整しましょう。
なお、k1、k2 ともに 0.00 には設定できないので注意!
Advanced viewer parameters クリックすると以下の詳細設定項目が開きます。
 Field-of-view angles 上下左右の視野角を調整できます。
通常 50°以上にするようですが、好みで設定していいと思います。
 Viewer contains some embedded magnets. 磁石式のボタンを搭載しているならチェックボックスを ON にします。
これはアプリに磁石の影響を受ける磁力計を使わないように指示するためです。

入力内容に問題がなければ「Generate profile」ボタンが押せるようになるので押しませう。
すると QR コードが作成されるので、ダウンロードして利用しましょう。
(一度きりではなくアプリごとに読む場合もあるので必ず保存しておきましょう)

慣れれば簡単なのですが、Google さんはもう少し手軽に個人向けな設定変更ができる仕組みを用意すべきだったのではないかと思いますね。

2016年11月29日火曜日

RPGツクールMV アクティブなウィンドウの背景色を変更できるプラグイン

正直RPGツクールのデフォ UI はちょっと分かりにくくて UX がフンガァァァな感じなので、せめて今操作できるアクティブウインドウだけでも見て分かるようにしようと思い作りましたふんぬらば。

ダウンロードはこちら
ライセンスは MIT だよ。


このプラグインは、アクティブ(操作対象)となっているウィンドウ背景の不透明度やカラーを変更することができます。
上の画像は通常のウィンドウをより薄くして、アクティブウィンドウの不透明度を上げています。
ちなみに、初期のウィンドウ背景は、画像(img/system/Window.png)の時点で多少透過されているため、それ以上は不透明化できないことに気が付かず2時間くらい無駄にしてしまわないようにご注意ください。しくしく。

不透明度だけでなくRGBでのカラー成分変更にも対応しています↓


他のレイアウト変更プラグインとも共存できます。たぶん。
特にスマホでのタッチ操作を考慮したプラグインと組み合わせるといい感じになると思うよ!

なお、不透明度だけの変更であれば問題ないのですが、ウィンドウカラーも変更する場合は以下の点にご注意ください。

「システム」の「ウィンドウカラー」の設定と、本プラグインの「アクティブなウィンドウカラー(赤緑青)」が異なる値になっているとウィンドウの開閉時にちょいと負荷が増えます。

これは、そもそも「システム」の「ウィンドウカラー」で色を変更すると、その分負荷が増えるのに、さらにそこからアクティブなウィンドウのカラーを変更する処理が追加されるためです。

赤緑青すべてが 0 だと負荷は発生しません。

負荷の軽い順の設定は以下のとおりです。

【軽】不透明度だけ変更する(ウィンドウカラーは変更しない)
システムのウィンドウカラー  :すべて0
アクティブなウィンドウカラー :すべて0
⇒負荷はほとんど増えません。

【並】システムのウィンドウカラーを変更する
システムのウィンドウカラー  :変更
アクティブなウィンドウカラー :すべて0
⇒ウィンドウの開閉時の負荷がちょっと増えます。

【並】アクティブなウィンドウカラーを変更する
システムのウィンドウカラー  :すべて0
アクティブなウィンドウカラー :変更
⇒ウィンドウの開閉時の負荷がちょっと増えます。

【普】本プラグインなしでシステムのウィンドウカラーを変更する
システムのウィンドウカラー  :変更
⇒全てのウィンドウが変更対象になるため開閉時の負荷がやや増えます。

【普】どちらも同じ値にする(すべて0でもない)
システムのウィンドウカラー  :↓と同じ
アクティブなウィンドウカラー :↑と同じ
⇒全てのウィンドウが変更対象になるため開閉時の負荷がやや増えます。

【重】両方を異なる値にする(すべて0でもない)
システムのウィンドウカラー  :↓と異なる
アクティブなウィンドウカラー :↑と異なる
⇒全てのウィンドウが変更対象な上にアクティブの処理が追加されるため開閉時の負荷がまあまあ増えます。

PC 向けならば特に問題ないですが、スマホも考慮する場合は、カラー変更は避けたほうがいいかもしれません。
また、そもそもツクールMVの v1.3.4 現在はウィンドウ関連のメモリリーク問題があるので、liply様作の liply_GC.js などの対策プラグインと合わせて利用ことをおすすめします。

2016年11月24日木曜日

Blogger に初めて投稿

もし使いやすかったら、こっちに移設しようかな。🐧
うわ、絵文字かわいくないなw🐇

これ以前の記事は PALog(http://blog.pandako.com)やパンダコメモ(http://memo.pandako.com)からの移植です。

2016年11月10日木曜日

RPGツクールMV アイテムなどの所持できる数を重量制にするプラグイン

武器とか99個も持って移動できるとか意味分からん!ってことでこんなプラグインを作りました。

このプラグインを有効にすると、個々のアイテムや武器・防具に重さが設定できるようになり、パーティーは決められた総重量までしかアイテムを所持できなくなります。

ローグライクなゲームやダンジョン系のゲームなどでは、所持品の吟味も楽しみの1つかと思うので、こいつを使ったらいいと思うよ。


変数による最大積載量(?)のコントロールや単位の変更なども可能です。
詳しくはプラグインのヘルプを読んでね。

★サンプルゲームはこちら

なお、メニューのレイアウトを変更するプラグインとかをいれてると崩れちゃうかと思いますが、そのへんは個々に対応するしか無いと思うのでガンバレ。

総重量ウィンドウの位置と不透明度を変更できるようにしました。 これによりメニューやショップのレイアウトを変更するプラグイン(例えば神無月サスケさん、Yoji Ojimaさん作の AltMenuScreen など)にも対応できるようになりました。



なお、例によって例のごとく理想的な Javascript の書き方ってのがよく分かってないので変なコードかもしれないけど我慢してくださいw

★最新の PNDK_LuggageCapacitySampleのダウンロードはこちら。(ツクマテ)


ライセンスは MIT だよ。どうぞご自由にお使いください。

2016年10月28日金曜日

RPGツクールMV かんたんにデータの送受信ができるプラグイン

とてもかんたんにサーバーへデータを送信したり受信したりできるようになります。
工夫次第でランキングや掲示板、1日1回のログインボーナス配布などなど色々なことに利用できるプラグインです。

例えば単純なランキングへのデータ送受信なら↓のように数行で作れちゃいます。



※もちろん別途ランキングを処理する PHP や CGI などが必要ですガ(^皿^)

サンプルゲームはこちら(PC・スマホ)
IE 用音無しサンプルゲームはこちら

PNDK_HttpRequest プラグインのダウンロードはこちら

■サンプルコードによる使い方説明

以下は PHP に name と score というデータを送り、ランキングの結果を表示するサンプルです。

◆文章:なし, ウィンドウ, 下
:文章:得点を送信するよ☆
◆変数の操作:#0001 受信データ = 0 ←(1)
◆プラグインコマンド:PNDK_HR clear ←(2)
◆プラグインコマンド:PNDK_HR add name \V[10] ←(3)
◆プラグインコマンド:PNDK_HR add score \V[11] ←(4)
◆プラグインコマンド:PNDK_HR send http://sample.jp/sample.php ←(5)
◆文章(S):速度 2 ←(6)
:文章(S):送受信中♪
◆文章:なし, ウィンドウ, 下
:文章:それではランキングの発表です!
◆文章:なし, ウィンドウ, 下 ←(7)
:文章:\V[1]

(1)まず、受信したデータが格納されるツクールの変数を初期化しています。
※必ずしも 0 である必要はありません。
受信したデータが格納されるツクールの変数はパラメータで設定できます。



(2)次に、このプラグインには送信データ専用の変数が予め用意されています。
前回の送信データが残っているとマズイので PNDK_HR clear で、その変数をキレイにしています。

(3)PNDK_HR add で送信データ専用の変数にデータを追加します。
PNDK_HR add name \V[10]
↑この場合、name というデータ名でツクールの変数ID 10番の値を送信データ専用の変数に追加しています。

(4)同様にツクールの変数ID 11番の値を score というデータ名で追加しています。
データはいくつでも追加できます。

(5)PNDK_HR send でデータを送信しています。
この例では http://sample.jp/sample.php に送信しています。
無事に通信が成功すればパラメータで設定した変数にサーバーより返信されたデータが格納されます。
(テキストデータの受信を想定しています。)

なお、エラーが発生した場合も、その変数にエラーメッセージが格納されます。
エラーメッセージとその意味は以下のとおりです。
ERROR TIMEOUT (タイムアウト)
ERROR ABORT (中止)
ERROR (なんやかんやエラー)
ERROR RESPONSE (サーバー側エラー)

(6)単なる時間稼ぎですw
送受信は一瞬では終わりません。
通信環境とデータ量によっては数秒かかることもあるでしょう。
そのため、受信が終わる前に受信用の変数を参照しても値は 0 です。
逆にそれを利用して受信が終わっているかを判断することもできますが、上記の例では割愛しています。

(7)受信したデータを文章として表示します。
このサンプルでは PHP がランキング結果のテキストを返信してくれることを想定しています。
万一、エラーが発生していたり受信が終わっていなければ、0 や ERROR なんたら、という文字列が表示されることになります。
そんなかっこ悪いことしたくない方は、いい感じに条件分岐してくださいw

■プラグインコマンドの説明

PNDK_HR clear
送信データ専用の変数を初期化します。

PNDK_HR add [データ名] [値]
送信データ専用の変数へデータを追加します。
[値]には制御文字が利用できます。

PNDK_HR send [URL]
送信データ専用の変数を[URL]へ POST メソッドで送信するとともに、パラメータで設定したツクールの変数にサーバーより返信されたデータが格納されます。

■注意点

通信はセキュリティで保護されません。
簡単に傍受できるので秘匿性の高い情報の通信には利用しないでください。
(クレカ番号とかパスワードとか個人情報とか)
このプラグインの利用により利用者または第三者に生じたいかなる損害や不利益も、このプラグインの開発者はその責任を負いません。

■使いみち

要はサーバー側の処理次第なのですが、これだけでも色々できるようになります。
以下はその一例です。
サーバー側のプログラムは別途根性で用意してください。
ただ、必ずしもデータを送信する必要はありませんし、プログラムではなくただのテキストファイルを読むだけにも利用できます。
  1. バージョン判定(古いバージョンで遊ばれるのを防ぐ)
  2. カウンター…というかプレイヤー動向分析(ゲームアナリティクス)
  3. UNIX タイムの取得(ズルされにくい日時の取得ができる)
    1. 毎日ボーナス
    2. 季節イベントとか
  4. プレイヤー間での情報共有
    1. ランキング
    2. 掲示板
    3. チャット(負荷かかりすぎかも)
    4. その他いろいろな情報
とはいえ仕様上、あまりリアルタイム性を求められるものには向きません。
他にもなにか面白い使いみちがありましたら教えて下さいませ。

2016年10月26日水曜日

RPGツクールMV 変数に小数を代入できるようにするプラグイン

なぜかツクールの変数には小数を代入できないようになっていたので、それを可能にするプラグインを作りました。
小数点以下第何位で四捨五入するかの設定も可能です。

ただ何故わざわざ小数を代入できないようにしていたのかが謎なので、その点ご留意ください。
一応、セーブしても問題ないことは確認済みです。

ちなみに、イベントコマンド「変数の操作」で小数を利用したい場合は、「オペランド」の「スクリプト」欄に小数を入力する方法がらくちんです。

↓ダウンロードはこちら
PNDK_FloatingPointVariables

2016年10月24日月曜日

RPGツクールMV ショプの価格変更プラグイン

たとえば魔王城近くの村は物価が高いとかできます。
まぁそれ自体はプラグイン使わなくてもできますが、総じて1.5倍とかできるので、個々に設定するより楽です。
また、買取価格(売却レート)も変更できます。
半額買い取りではなく等価買い取りとか、逆に引き取り手数料取ったりできます。

【2016/10/27追記】
小数ではなく整数の%で設定できるように仕様変更。


【2016/10/26追記】
新たに制御文字に対応しました。
これによりレートを変数で管理することができるようになり、例えばプレイヤーの選択によって世界の物価が変動する、などということも可能になります。
また変数なのでレートもセーブされることになります。

ただしツクールの変数には小数を代入できないので、変数を用いてレートをコントロールする場合は、小数を代入できるようにするプラグインを利用することをおすすめします。(パラメータやプラグインコマンドでの小数の利用は可能です)
サンプルゲームでは自前の「PNDK_FloatingPointVariables」プラグインを使用しています。


プラグインのコードもお作法にのっとった形に修正して、ファイル名も他とかぶりにくいように修正しました。

サンプルゲームはこちら(IE不可)
IE用サンプルゲームはこちら(音無し)

■ プラグインコマンドの使い方例

PNDK_ShopPriceChanger buy 50      #購入価格を半額(50%)にする
PNDK_ShopPriceChanger sell 100    #売却価格を購入価格と同じ(100%)にする
PNDK_ShopPriceChanger sell \V[n]  #売却価格を変数n番のレートにする
PNDK_ShopPriceChanger reset       #パラメータで設定した値にリセット

初めて作ったプラグインなので、やらかしてたらご指摘頂けると助かります。
PNDK_ShopPriceChangerのダウンロードはこちら

2016年4月6日水曜日

Adobe AIR で作った Android アプリの OpenSSL 脆弱性アラート解決法

先日 Google Play から 「Google Play warning: You are using a vulnerable version of OpenSSL」 ってメールが来て、デベロッパーコンソールへ見に行ったら「セキュリティ アラート アプリで使用中の OpenSSL のバージョンにセキュリティの脆弱性があります。」的なアラートが出ていてオイオイどないしたらえーねん状態だったのですが、解決できたのでメモります。

まず対象のアプリは Adobe AIR for Android で作ったものだったので、そのあたりでググったら、どうやら Adobe AIR SDK を 最新(この時は AIR21.0 以上)にアップすれば解決するってことらしいので、以下 Animate CC にそいつをぶっこむ手順です。

1.最新の Adobe AIR SDK をダウンロードする

↓から入手する。
Download Adobe AIR SDK

2.解凍した Adobe AIR SDK の内容一式をどっかにコピーする

Animate CC のメニュー「ヘルプ(H)」に「Adobe AIR SDK を管理(R)」ってのがあって、AIR20.0 が入ってる場所が確認できたので、そのとなりに AIR21.0 ってフォルダ作ってコピーしました。
具体的には
C:\Program Files\Adobe\Adobe Animate CC 2015\AIR21.0\
です。え?Mac?知るかっ!

3.コピーした SDK を選択できるようにする

Animate CC のメニュー「ヘルプ(H)」に「Adobe AIR SDK を管理(R)」を選択すると出てくるウィンドウで、さっきのフォルダを追加する。

4.ターゲットでコピーした SDK のバージョンを選択してパブリッシュ!

これで無事 OpenSSL 1.0.2f になりました!ヽ(=´▽`=)ノ
放置されてる ANEs に原因があったら終わるので、SDK の問題でほんと良かったと思いました。ε-(´∀`*)

おまけ

Google 先生のヘルプ「How to address OpenSSL vulnerabilities in your apps」では、「$ unzip -p YourApp.apk | strings | grep “OpenSSL”」ってやれば調べられるよイエイ!とか書いてありますがオイオイこちとら安定の Windows なんですけど!ってことで、私は以下のようにしてアプリ内で使われている OpenSSL のバージョンを調べました。

まず対象の apk ファイルを解凍します。
そのままだと解凍できないなら拡張子を .zip にしちゃってください。
んでコマンド プロンプト立ち上げて解凍したフォルダまで移動する。(dir とか cd コマンドだ!)
一番簡単なのは「cd[半角スペース]」って入力した後、コマンド プロンプトウィンドウに解凍したフォルダをドロップしちゃう方法です。
それで「cd C:\なんたらかんたら」と勝手に記述されるはずなので enter キーをッターーンて押せば移動できます。

そしたら「findstr」コマンドでファイル内検索します。
具体的には「findstr /s /m “OpenSSL” *.*」としました。
オプションの意味とかこのコマンドの使い方を知りたい時は「findstr /?」で、ッターーンだ!
UTF-8 には対応してないらしいけど、まぁ英字だしヒットはします。

今回の場合は「\lib\armeabi-v7a\libCore.so」がヒットしました。
それをエディターで開いて「OpenSSL」って検索したらたくさんヒットして、そのなかに「OpenSSL 1.0.0」とか書かれていたりしたので、こいつが悪いんだと思います。
上記の SDK アップ後はこれが「OpenSSL 1.0.2f」になりました。

これでめでたしめでたしです。

2016年3月7日月曜日

ANE でアプリ内課金(In App Purchase)を Flash CC (Animate CC) で導入する手順

はいはいFlashは死にましたね。そーですね。
(とか書いてる間に Adobe Animate CC になったよ)
おかげで2016年にもなるとANEの使い方すら見つけ難い始末ですよ。
あっても Flash Builder での使い方とかばっかで意味わからんワー。
ってなわけで、自分で書きます。

■ やりたいこと
AIR for android で作ったアプリに課金機能を追加してジャブジャブ課金してもらう。

■ 使ったソフト
・ Adobe Flash Professional CC 2015

■ あまり参考にしてはいけないページ
Adobe AIR 用ネイティブ拡張の使用
http://help.adobe.com/ja_JP/air/build/WS597e5dadb9cc1e0253f7d2fc1311b491071-8000.html
「ANEの使い方」などと検索するといまだに上位に出てくるけど、一部の情報が古く既に不要となった手順なども含まれているという公式マニュアルとは思えないページ。

■ 一般的な ANE の使い方手順
1)ANE ファイルを用意する
GitHub とかから落とすなりなんなりする。

2)FlashでさっきのANEを登録。
1、2、3で完了だ。


3)ActionScript でなんやかんやする。
まともなマニュアルやリファレンスが用意されてる ANE なんてこの世に存在しないけど頑張れ!

4)AIR でパブリッシュ!
おわり。
うわチョー簡単!上記公式マニュアルのクソっぷりが際立つ!

ただし、利用する ANE によっては上記以外に、なんたら-app.xml への追記なども行う必要があるぞ。
あと、ANE は AIR じゃないと使えないからパブリッシュのターゲットは AIR のやつを選ぼう。
Flash Player とのマルチプラットフォームの場合は条件付きコンパイルとか使ってコードも実行されないようにしないとダメだぞ。

■ 試してみた ANE
いずれも2016年1月時点でダウンロードしたものを使用。

・ Freshplanet の ANE-In-App-Purchase
おそらく最も利用されているであろう有名な ANE なので、当然動くものと思い実装してみるもパブリッシュ時にエラーを吐血する始末。
フォーラムでも同症状の人が質問しているが、もー3ヶ月ぐらい経ってるけど現時点でも回答なし。
自己解決はあきらめて次へ進んだ。

・ StudioPixMix の ANE-InAppPurchase
ちょっと試してみた ANE。
驚いたことにどうやらライセンスキー(パブリックキー)を設定する手段がないという ANE なので完全に使い物にならない。
これをもとに自分で作れる人向けなのか?それにしてはリファレンスまで用意してるのが謎…;

・ pozirk の AndroidInAppPurchase
Android のみ。ANE と swc のハイブリッドw

今回は消去法で pozirk の AndroidInAppPurchase を使用することに決定。
もーこの時点で不安しかない。

■ 具体的に実装手順
1)AndroidInAppPurchase のページから一式ダウンロードする。
https://github.com/pozirk/AndroidInAppPurchase
「Download ZIP」から落とせるよ。探せ。

2)必要なファイルをコピーする。
比較的親切な readme.md の指示に従い
「InAppPurchase.ane」と
「air\InAppPurchase\bin\InAppPurchase.swc」をflaファイルと同じ場所にコピー。
フォルダ構成は無視して2つともファイルだけ直に置けばOKだ。
それ以外はゴミだ捨てろ。

3)FlashでさっきのANEを登録。
上記の「1、2、3で完了だ」を2つ分やる。

4)なんたら-app.xml にアプリ内課金の権限(パーミッション)を追加。
権限の設定は「AIR for Android 設定」の「権限」タブでできるが、残念ながら課金権限のチェックボックスは用意されていない。
つまり自分で xml に追記する必要がある。
一度でもパブリッシュしていれば xml も勝手に生成されているはずなので、それを利用するが、その前に「権限」タブで「アプリケーション記述ファイルへの権限およびマニュフェストの追加を主導で管理します」にチェックを入れておかないと、毎回追記するはめになる。
ちなみにチェックを入れても権限とマニュフェスト周辺以外は引き続き更新してくれるので、毎回バージョンを書きなおすとかはしなくてもOKだ!

んで、追記する場所は <manifestAdditions> のなかということだけれど、具体的には…
<uses-permission android:name="android.permission.INTERNET"/>
とかの次でいいんじゃね?てきとーてきとー。
え?そんなのどこにもない?しるか!「権限」タブでチェック入れとけや!

んでそこに↓を追記する。
<uses-permission android:name="com.android.vending.BILLING" />
<application android:enabled="true">
<activity android:name="com.pozirk.payment.BillingActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" android:background="#30000000" />
</application>
あと <extensions> に <extensionID> を追加する必要があるけど、これは自動的におこなわれるはず。

5)ActionScript を書く!
ありがたいことに readme.md に例が記述されているので参考にする。

[サンプル準備中]

6)テストする
当たり前だけど Flash のプレビューとかでは Google アカウントと紐付いていないからエラーが出てテストにはならないよ。
実機でテストしませう。
ただし、開発者アカウントでインストールすると「出版社はこのアイテムを購入できません。」とかいうネイティブな日本語エラーが返ってくるだけなので、別のアカウントを使わないとテストにならない。
で、その別アカもテストユーザーとして登録しておかないと、ベータ版テストだろうと容赦なく課金されるので注意だ。
ちゃんとデベロッパーコンソールの「設定」>「アカウントの詳細」>「ライセンス テスト」でメアドを登録しておきませう。(2016年3月現在)
さすれば数時間後には効果が発揮され、テス垢で購入しようとすると「これはテスト用の注文です。課金は発生しません。」というメッセージが表示されるようになって課金テストし放題になるでござる。

7)公開する!
そして現実は甘くないことを実感するがいい!