主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年10月31日月曜日

AndroidStudioでGoogle In-app Billingを試す(その2)

前回の記事はこちらです。

再度、購入しようとしてみたところ「エラー 指定したアイテムは購入できません。」と出た。公開しないといけないらしい(参考)。公開といっても製品版でなければ、テストユーザー内に公開ということになる。


公開できない理由を見ながら、すべての項目を埋めていく。アイコンの用意などがあるので、これらはフリー素材を借りてリサイズした。公開が完了するまでには数分から数時間かかる。

公開が完了したが、依然としてエラーは解消されない。

閑話

再度、英語の手順を確認してみると「IInAppBillingService.aidl」を追加しなければいけないとある。AIDLとはAndroid Interface Definition Languageの略で、これがGoogle Playサービスへのインターフェースを定義しているとのことだ。

ただこのAIDLはサンプルのTrivialDriveには既に含まれており、自作のアプリを作った際はこのサンプルのAIDLをコピーして使う方法について書かれているだけである。

言い始めれば、このGoogleのトレーニングはTrivialDriveを通してアプリ内課金の方法を理解するものではなく、自作のアプリにTrivialDriveのAIDLを使ってアプリ内課金を実装するものだったようだ。

尚、「IInAppBillingService.aidl」は下図の場所にあった。Googleがアプリ内課金で提供しているメソッドが書いてあった。


閑話休題

アプリを「クローズドアルファ版テスト」で公開したのだが、テストアカウントをリストに登録するだけでは不十分で、オプトインURLにアクセスする必要があった。

テストしたいアカウントでオプトインURLにアクセスすると次のように表示され、これでようやくコンソール(アプリ内アイテム)の更新が反映されることとなった。


有効になったテストアカウントで購入をしようとすると、次のように表示される。この時点で既にテスト用の注文であることが表示されてくれる。


尚、iPhone移行前に使っていたアカウントだと次のように表示された。


「Buy Gas」で"gas"の購入。「Upgrade My Car」で"premium"の購入(車が青から赤になるらしい)。「Get Infinite Gas」で"infinite_gas_monthly"か"infinite_gas_yearly"の購入のようだ。


尚、コンソールにアイテムが登録されていない場合でも「認証が必要です。Googleアカウントにログインしてください。」と表示されるようだった。実体とエラー文が異なるのでかなり注意。


このときAndroid Device Monitorに表示されるErrorを含むログは次の2文。

2016年10月27日木曜日

AndroidStudioでGoogle In-app Billingを試す(その1)

こちらのフローに従う。日本語だとこちらが良さそうだった。

sampleをAndroidStudioで起動させるとエラーが発生した。

Failed to find: com.android.support:appcompat-v7:21.+
Install Repository and sync project

こちらの通り、Android Support Repositoryを追加したところ直った。
SDK Managerがどこにあるのか分からなかったので、AndroidStudioの検索で引っ掛けた。
Android Support Repositoryはここにある。


簡単に調べてみたところ、Android Support Repositoryに含まれる「Google Repository」が必要だったらしい。

エラーは消えたが画面に何も表示されないので、左のprojectや下のmonitorタブを開いてあげる必要がある。次はMainActivity.javaを修正する必要があるらしいが、それがどこにあるか分からない。下図の場所にあった。


閑話

上部メニューのRun>Run"app"でエミュレーターで実行が可能(参考)。
エミュレーターが起動すると、実機のような画面となるが、実行するアプリが立ち上がるまではかなり時間がかかる。また、Trivial Driveは実行できずにすぐに閉じてしまった。

なお、この問題とは別だと思うがアプリ内課金のテストは実機でしか行えない(参考)。これは、通信が端末のGoogle Playアプリを通して行われるかららしい(参考)。

閑話休題

次に、Google Play Developer Consoleにこのアプリを追加して公開鍵を手に入れることになる。Android Studioで署名付きapkを出力する方法はこちら

ただし、パッケージ名が「com.Sample.***」となっているため、このままだとGoogle Play Developer Consoleで弾かれる。Android Studioで修正するには、下図のAndroidManifest.xmlの該当箇所を右クリックでrefactor→renameする(参考1参考2)。ただし、ダイアログに従うだけでは置換されず、左下のDo Refactorを押して初めて置換された。


この際、下図のbuild.gradleのapplicationIdは置換されていないので、ここは手動で直す必要がある。


これを直したらリビルドしてから、署名付きapkを出力する。尚、出力先に既にapkがあっても「上書きしますか?」とは聞いてこない。

注意点(参考
  1. apkのTypeはリリースにした方が良いらしい
  2. コンソールにアップロードする必要があるが、テストであればアルファ版でも良いらしい(参考
  3. テスト用のアカウントを事前に登録しなければ、課金が発生してしまう(登録の仕方)。尚、テストアカウントを登録しても通知などはこない。
  4. アプリ内課金をするアカウントは住所の登録が必要
  5. コンソールへの反映には時間がかかる
次にアプリ内アイテムの登録を行う。登録はコンソールの「アプリ内アイテム」から行う。販売者登録がまだの場合は、先にそちらを済ませるように言われる。項目はフルで埋める必要がある。途中のチェックボックスはチェックを入れておいた。



アイテムの追加は冒頭の解説を参照のこと。
尚、

  • gasが管理対象外の商品
  • premiumが管理対象の商品
  • infinite_gasが定期購読

とのことである(参考)。これは途中から変えることができないので注意。IDも再利用できない。

これが終わったらサンプルの公開鍵を修正する必要があるのだが、Android Studioで再度プロジェクトを開こうとしたら「Cannot load project: java.lang.NullPointerException」というエラーが出て開けなかった。

Android Studioのbin(本体のあるフォルダ)にある「idea.properties」をメモ帳で開き、末尾に「disable.android.first.run=true」を追加して再起動したところ、本当に直った(参考)。管理者権限でないと操作できなかった。また直接上書き保存ができなかったので、いったん追記したものをデスクトップに保存した後、ファイルを置き換えた。

修正したapkを実機にインストールし、ガスを購入しようとしたところ「エラー 認証が必要です。Googleアカウントにログインしてください。」というエラーが出た。端末の「設定>アカウントと同期」を確認してみたところ、アカウントが同期していないかった。

尚、今回のサンプルはこれで解決したが、別アプリにてアプリ内課金時に同様のエラーが出てGooglePlayの入れ直しなどを行った(参考)。


>>次回に続く。


日本語での解説記事っぽいもの。
その1(冒頭に移動)
その2(女の子の絵のサイト)
その3(Androidアプリ開発!:Main Activity内の処理を日本語で説明)
その4(EGG)
その5(Wander Planet)

途中で見つけた気になる記事。(解決策は次回とあるが、次回はない模様)

2016年10月21日金曜日

【unity】 Installation failed with the following output:

Unityで実機にビルドできないときのエラーの一つ。
Installation failed with the following output:について。

ググるとandroidで対応する最下位のバージョン指定と、実機のバージョンが合わないことが原因とある。次に引っかかるのはzipalign.exeについて。

ただ、どうやら実機で何か問題が起こっている場合、それを解決しないとこのUnityのコンソールにこのログが出てビルドが失敗する模様。実機のシステムメモリが不足しているときにこのエラーが出て、アプリを削除してメモリを確保したところビルドに成功した

2016年10月5日水曜日

C++について


  • 派生クラスを作る際、基底クラスにアクセス修飾子をつける意味(参考