Unity2018.3からOpenJDKに
Unity2018.3 からJDKではなくて、OpenJDK が Android Build Support に含まれので、今後はJDKを別途インストールしなくていいっぽい。JDKが2019年1月以降に有償化されるのでその関係なんでしょか?
Unity2018.3 からJDKではなくて、OpenJDK が Android Build Support に含まれので、今後はJDKを別途インストールしなくていいっぽい。JDKが2019年1月以降に有償化されるのでその関係なんでしょか?
すでに、Google Analytics導入済みのプロジェクトに、Google Play Servicesを追加したらAndroidへ書き出し時に下記のエラーが出た。
mp4などのムービーをHandheld.PlayFullScreenMovieなどで使うときは、Unity用の変換がされないようにStreamingAssetsフォルダに格納する必要がある。
StreamingAssetsに置くとUnity用の変換がされず、生のデータとして扱えるけどムービーなどの大きなファイルの場合書き出した本体ファイルが大きくなってしまう。
そこで、アセットバンドルの仕組みでムービーを外部に置きたいけど、アセットバンドル構築の際に
‘MovieTexture’ is not supported when building for ****.
と怒られてしまう。
Continue…
iTunes Storeでは問題ないんですが、Google Play Marketにアプリを登録する際にアプリが100MB以上だとファイルを分割しないといけないらしい。
メインのapkファイルと、obbファイル(Opaque Binary Blob)というものに分ける必要がある。
obbファイルというのは暗号化されたディスクイメージみたいなものらしい。
詳しくはこちら
キノコの自省録 | Expansion Filesについて(1) – obb作成編
分割自体はUnityであればビルドセッティングのAndroidのPublishing Settingsから
この「Split Application Binary」というのをチェックすれば自動で分けてかき出してくれるので便利。
作られたapkとobbをアップロードすればあとは自動でアプリをインストール時にobbファイルも追加で落としてくれて一件落着…なのですがどうもobbファイルのダウンロードに失敗したりディスク容量やネットワークの関係やユーザーのキャンセル操作で落とされないことがあるらしい…
その際の対処処理は自前で書かないといけなく、そのためのライブラリ「Google Play OBB Downloader」もUnityから提供されている。
これを使って実装をすると
Continue…
課金を行う際に、値段やタイトルなどアプリに組み込むとタイトルの変更や為替の変動による価格の変更に対応するためアプリの再申請が必要になってしまう。
そもそも世界で売る場合は使用しているマーケットの国がわからないので金額が分かりませんね。
なのでマーケット(iTunes Store/Google Play)から直接取得した方がイイ。
SOOMLAだとまずはイベントのリスニング
StoreEvents.OnSoomlaStoreInitialized += this.OnSoomlaStoreInitialized; StoreEvents.OnMarketItemsRefreshFinished += this.OnMarketItemsRefreshFinished; StoreEvents.OnMarketItemsRefreshFailed += this.OnMarketItemsRefreshFailed; this.storeAssets = new StoreAssets(); SoomlaStore.Initialize(this.storeAssets);
そして、初期化完了後にマーケットの情報を取得しに行く。
void OnSoomlaStoreInitialized() { #if UNITY_EDITOR this.OnMarketItemsRefreshFinished(new List<MarketItem>()); #else SoomlaStore.RefreshMarketItemsDetails(); #endif }
取得ができたら自分のストアの設定の情報を取得したMarketItemで上書き。
void OnMarketItemsRefreshFinished(List<MarketItem> marketItems) { // ストアの情報を取得したMarketItemで上書きさせていく foreach (MarketItem item in marketItems) { foreach (VirtualGood good in this.storeAssets.GetGoods()) { PurchaseWithMarket purchaseType = good.PurchaseType as PurchaseWithMarket; if (purchaseType.MarketItem.ProductId == item.ProductId) { purchaseType.MarketItem = item; } } StoreEvents.OnSoomlaStoreInitialized -= this.OnSoomlaStoreInitialized; StoreEvents.OnMarketItemsRefreshFinished -= this.OnMarketItemsRefreshFinished; StoreEvents.OnMarketItemsRefreshFailed -= this.OnMarketItemsRefreshFailed; }
ここは…こんな感じでいいのかしら…?
手動でやるのかな?
ストアの情報の取得は稀に失敗することもあるので、何度かリトライさせる必要もありそうです。
UnityでIAP(アプリ内課金)をやってみたのでメモ。(Store Version 1.8.2)
まず、どんなライブラリがあるのかはこちらが参考になります。
基本的にSOOMLAは課金周りの処理だけではなくて、ユーザーのアイテム管理、ショップ管理までサポートするフレームワークでそこに課金機能もサポートされているという感じ。ユーザーの持ち物をすべてOS側のデータ領域に保存してくれる。
アプリ内でショップ、持ち物の管理ができるので便利だけど、サーバー側でも同じような管理をする場合にはその辺の機能は使わず購入処理だけうまく使う感じになりますが、その場合はprime31なんかを使った方がシンプルかもしれません。(有料 iOS/Androidそれぞれ$70くらい)
今回はサーバーでアイテムを管理するものの、SOOMLAのソースコードやコメントがキレイだったり、アップデートが頻繁だったりSOOMLA側のスタッフやユーザーのコミュニティが活発だったのでSOOMLAを選んでみた。
SOOMLAで(消耗型)課金コンテンツの実装でのメモ。
そもそもアプリ内課金自体が初めてなので、各プラットフォームの下準備。
まずはiOS側の下準備。