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)公開する!
そして現実は甘くないことを実感するがいい!