FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

    タグ:Android

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityでアプリを作成したとき、SNSへの投稿を簡単にすることができるものがあります。「Social Connector」というものでUnityの人が作っていて有名なようです。

    AndroidとiOS用に作られていて各種SNSに投稿できるようになるプラグインとなっています。(正確に言うとAndroidはC#のスクリプト上で実装されているので外部コードを含まずプラグインではないです。iOSはObjective-Cを含んでいるのでプラグインです。まあ、気にしなくていいことですが。)

    テキストとURLと画像を1枚まで投稿することができます。URLや画像はオプションです。画像を使う場合は画像ファイルのパスを渡します。画像を使う場合はその画像にアクセスできるようになっていることが重要です。(権限や存在を確認する方が良いです。)
    利用に関してのライセンスも制限が少なくて利用しやすいです。


    今のところ私はAndroidでしか利用していないのですが、将来的にはiOS用のアプリを使って利用したいと思っています。そこで少し気になることがあるのです。

    iOSではLINEのアイコンを入れることが必要です。(Androidでは入れなくても問題なく使えます。)
    このLINEのアイコンはここでダウンロードできるのですが、 してはいけないこと変形・加工と明記されています。アイコン(PNG)をダウンロードすると、350x350の画像しかないので、Social Connectorの要求する57x57、114x114、120x120、180x180、72x72、144x144をどうやって用意すればいいのかがわかりませんでした。加工が禁止されているので、画像を縮小することもできないので、どこかに他のサイズを公式に提供しているのかもしれませんが……

    上に書いた懸念はロゴを改変してないということでおそらくは杞憂なのでしょう。そうでなければサイズ違いのアイコンを使うアプリで使用できなくなってしまいますから。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    このアプリでは画面は横向きです。縦向きだと数字が縦に並んで見にくかったからです。なぜか見にくいと感じました。生理的なものなのかもしれません。

    画面の向きの設定はPlayerSettingsのOrientationという項目を設定します。モバイルではPortraitがデフォルトですが、これは縦向きの表示です。縦向きの表示ではホームボタン(Androidではナビゲーションバーのこと)は画面の下部に来ます。
    Portraitはホームボタンが端末の下側に来ている状態です。逆にPortrait Upside Downではホームボタンが端末の上側に来ていて、スマホを上下反対にして遊ぶことになります。
    横向きにするにはLandscape RightかLandscape Leftを選びます。端末によって向きが違うかもしれないので試してみることをお勧めします。

     autorotation-screen
    このアプリでは横向きであれば良いので、Landscape RightとLandscape Leftを切り替えられるように設定しました。上のような設定にすると端末を回すと、画面の表示が切り替わります。横向きにする設定だけをチェックしてあるので表示が崩れたりもしません。
    ひとつ問題があるとすれば、全画面表示の広告の向きは一定のようで、逆に表示される人もいるということくらいです。(Unityが制御しているわけではないからです。)


    最後に新しいアプリの名前を決めました。『FlashNumbers』とします。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    2/6に『トランプ・ゲスイット』を公開しました。
    tgi-title

    トランプゲームの「ゲスイット」を遊ぶことのできるアプリです。
    プレイヤー数は2人でA~Kまでの13枚のトランプを使います。6枚ずつの手札が配られ、配られなかった残り1枚のカードが何かを当てるゲームです。推理と嘘の駆け引きを楽しむことができます。

    本アプリでは学習するAIが搭載されています。はじめは何のデータも存在しないので、場当たり的に行動を起こしますが、ゲームを繰り返していくとそれなりに強くなります。10回程度同じように行動すると、それに適応するように感じます。

    ゲスイットとはGuess itから来ています。おわかりでしょうが念のため。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    AndroidではAPKファイルを渡せば、アプリを簡単に配布することができます。このあたりがiOSに比べて緩く自由だと言われていることの原因の一つでしょう。開発中は便利な機能であるので、知っておくと良いと思います。

    端末のどこか(Downloadフォルダに置くのがわかりやすくて良いです。)にAPKファイルをコピーして、ファイルマネージャーアプリでそのファイルを選べばインストールができるでしょう。
    以下では「ESファイルエクスプローラー」というファイルマネージャーを使ってインストールしています。このアプリだけがインストールに対応しているのではなく、いくつかのファイルマネージャーでインストールは可能です。

    端末のDownloadフォルダにAPKファイルをコピーしてファイルマネージャーを起動します。
    以下のようにファイルが表示されています。
    externalInstall1

    表示されているアイコンをタップすると、
    externalInstall2
    いくつかの操作が選べるウィンドウが現れました。右端のインストールを選ぶと次に進みます。パッケージ名が同じアプリがインストールされている場合は上書きされるので注意してください。
    端末の設定によっては、インストールを押した後で警告が出ると思います。その対処については後述します。設定が問題ない場合は権限確認画面になります。

    インストールを押したら次のような画面になります。
    危険な権限等があれば、ここに権限の一覧が出るはずです。今回は特にないので何も出ていません。右下のインストールを押してインストールを実行します。
    externalInstall3

    インストールの間はバーがアニメーションしている画面になります。このときにはアプリを終了せず待ちましょう。しばらくすると右のようにインストールが完了したと告知されます。インストールできたので、アプリの一覧に追加されていて実行ができます。
    externalInstall4 externalInstall5

    先ほどの手順で権限確認画面にいけず警告が出る場合の対処を書いておきます。
    以下のようなインストールができない警告が出ているのですが、これはセキュリティの許可がなされていないことによります。
    externalInstallErr1

    設定->セキュリティを選び、提供元不明のアプリという項目を確認します。おそらく以下の画像のようにチェックが入っていないと思われます。
    externalInstallErr2

    これを有効にすることでファイルマネージャーからインストールができるようになります。有効にするときに警告が表示されますが、OKを選びます。
    externalInstallErr3

    設定をしたら項目が有効にされている表示になったことを確認してください。
    externalInstallErr4

    このように有効化されたら、再度インストールの手順を行ってください。


    Unityではビルドの設定をBuild And Runにすれば、APKファイルを作るだけでなくUSBケーブルにつないだAndroid端末にインストールも自動で行います。このため1つの端末でテストするだけなら、インストール方法を知らなくても開発を進められます。
    この自動で行われるインストールは大変便利ですが、大勢の人に見てもらう時や複数人での開発のときにはファイルを用いたインストール方法で誰でもAPKからインストールできるというのは重要です。

    自分の開発しているアプリだけでなく、APKファイルが手に入ればどのようなものもインストールが可能です。出所が怪しいAPKファイルは危険なので、インストールしないようにしましょう。自己責任です。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    開発中のアプリの紹介動画を作ってみました。
    ゲスイットというトランプゲームはマイナーなゲームだと思います。そんなわけでどういう風にゲームが進んでいくのかイメージしにくいでしょう。現時点で完成している対戦画面を動画にしたので、興味ある方はどういうゲームなのか見てください。

    YouTubeとニコニコ動画にアップした紹介動画を載せておきます。内容は同じですので、お好きな方をどうぞ。




    作っていると何百回も対戦することになるので、私は感覚がマヒしてきています。面白いかどうかはもはや判断しにくいので、細かいところの作り込みをして仕上げているところです。
    AIが学習するというのが挑戦的な今作なのですが、AIの学習方法がばれるとひっかけることができてしまいます。ルールに基づいて判断する固定的なAIの方がやはり良いのではないかと思う最近ですが、学習型のAIと固定的なAIの組み合わせが最適なのかもしれないとも思っています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ゲームなどのアプリでは、SNS系のアプリ(Twitter、LINE、Facebookなど)に拡散できる仕組みを入れるのが常識になっています。文字だけの投稿もありますが、画像があった方が良いので最近は画像付きの投稿が行えるものも多くなっています。

    画像付きのツイートを送信するには当然画像がなければなりません。この画像はスクリーンショットを使うことがほとんどでしょう。画面を撮影した画像を特定のフォルダに保存して、その場所と文字列(アプリの紹介文だったり、ゲームの結果だったり)をTwitterアプリに渡すことで画像の付きのツイートができるわけです。
    画像を作ったり、Twitterアプリに適切なものを渡して連携するところもそれなりに難しいのですが、一度できてしまえばどんなアプリでも同じ仕組みで動きます。ちゃんと作るという条件付きですが、成功したら正しく動くのでわけのわからない問題は起きないでしょう。

    きちんと作って画像付きのツイートを送信することができたとしても、Android6.0では動かなくなることがあると判明しました。Android6.0に対応するように作っていないのだから、それはそうだという話ではありますが、Unityを使っているとAndroidを直接いじるのは面倒極まりないのです。なので対処法を見つけることにして、なんとかお茶を濁そうと考えています。

    原因はAndroid6.0以上のOSを使っている場合、権限の管理ができるようになったためでした。この権限のうちWRITE_EXTERNAL_STORAGEというファイルの保存に関わる許可を得られないと画像ファイルにアクセスできないため、画像付きのツイートができないのです。しかもTwitterが落ちることも結構あります。
    SS_TwitterAbort

    5.9以前ではアプリをインストールするときに必要な権限は全て許可するようになっていたので、開発者はAndroidManifestに必要なパーミッションを入れておけばそれで十分でした。
    しかしながら6.0ではユーザーが自由に権限をON/OFFできるようになってるため、それだと不十分なことがあります。「Android 6.0 以降のアプリの権限の管理」として公式ページで説明してあります。

    どのような操作をすると画像付きのツイートを送信できるようになるか
    をメモしておきます。Android6.0以前の端末ではきちんと動くのに6.0では動かないという場合、以下の対応で正常に動く可能性があります。(試した端末のAndroidバージョンは6.0.1でした。)
    まず画像付きのツイートをすると画像にアクセスできずにTwitterアプリが停止するといった症状が出る場合、設定->アプリを開き、Twitterにデータを渡している問題のアプリを開きます。アプリの情報が下のように表示されているはずです。
    許可というところをみると「権限が付与されていません」と出ています。この状態だと駄目なので、許可というところをタップして設定を変えます。許可をタップすると右のようにアプリの権限の一覧画面になります。ここではストレージという権限があり、それが無効になっているという状態です。
    SS_TN_PicTwi1 SS_TN_PicTwi2

    ストレージをタップして権限を有効化します。右の方にトグルが移動し、緑色になりました。これで権限がゆうこうになります。1つ前のアプリ情報の画面に戻ると、許可にストレージが現れています。
    SS_TN_PicTwi3 SS_TN_PicTwi4

    権限の有効・無効を設定した場合、一度アプリを終了させないと反映されないようです。意外と重要なことですが、忘れがちなことなので注意するべきです。


    Android6.0以降に対応したアプリでは権限の管理についても対応するというのが正しいあり方です。
    対応方法は開発者用の情報に載っています。当然AndroidのAPIを直接呼び出しています。
    権限があるか常にチェックするためのメソッドがあり、それにより権限が与えられているかを判定してプログラミングすれば良さそうです。また権限を要求するためのダイアログを出す機能も用意されていました。(Runtime Permissonとかで検索するとそれなりにヒットするので興味がある場合は調べてみるのもいいと思います。)

    端末ごとの対応はしたくないので、テキストだけのツイートにするかアプリの紹介ページに「Android6.0をお使いの方は~」 的な対処方法を書いておくのが現実的かなあというところです。
    アプリが落ちたりしないようなので、まあ妥協点です。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    MVNOを使えばスマートフォンにしても料金が抑えられるということで携帯電話をスマートフォンに変えました。それにあたってSIMフリーのスマートフォンが必要になったのですが、新しく用意することにしました。

    既にAscend G6という端末を買っていたのですが、 処理能力が低く電池の持ちも悪いので良い端末を買おうと思いました。Ascend G6は廉価なのでスペック不足なのはしょうがないのです。むしろ一番気になったのは発熱でした。通話中にこれだけ熱くなったら嫌だなあというのが、電話として使うのにためらわれた理由でした。
    Ascend G6はスマートフォンの便利さを教えてくれましたが、物足りなさがあったのです。

    最終的にはNexus 5Xを買ったわけですが、他にも候補がありました。
    も良さそうな端末だと思いました。これらは大きさが小さめでそれなりの性能の端末です。Androidの更新がされていくなら、これらの端末もアリだと思います。開発機としても使いたいことを考えると、Androidの更新がサポートされないのは大きなデメリットです。Nexus 5はAndroidの更新がサポートされていますが、今だと少し性能が低い感じです。
    値段は新品でXperia J1 Compactが4万円くらい、Xperia Z3 Compactが5万円後半くらい、Nexus 5が4万円くらいです。Xperia Z3 Compactは4万円くらいだったのですが、今は結構高くなってしまいました。

    一番Nexus 5が良さそうだと 思ったのですが、新型のNexus 5Xが既に出ていてどちらにしようか迷いました。性能が優れ新しいAndroidを搭載しているので、Nexus 5Xを買うことにしました。ちょっと値段が円安の影響で高かったのが微妙ですが、それ以外ではかなり満足できる機種だと思います。(最新のAndroidを入れたい人でなければあまり魅力的ではないかもしれませんが……)


    最も便利だと思った機能は端末の背面にある指紋認証機能です。スリープ状態で登録した指を指紋認証部分に当てるとロックが解除されます。
    これはやってみると非常に便利な機能であることがわかります。普通は電源ボタンを押してパスワード認証を経て使えるようになります。パスワード設定しないことはないでしょうから、いちいち認証するのは結構な手間です。指紋認証機能では指を当てるだけなので、ほんの数秒で済みます。たまに通常のパターン認証などを求められますが、ほとんどは指紋で認証されます。
    また指紋認証ができたかが振動でわかるようになっています。成功すると短く1度振動し、失敗したら短く2度振動します。持ってみると違いは明らかなので、手元を見ずに操作ができます。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    知っている人も多いと思いますが、Android6.0でも隠しゲームがやはりありました。
    ゲームの内容がAndroid5.0と変わらなかったのは残念ですが、相変わらず難しいゲームです。

    遊び方は設定画面の一番下にある端末情報を開きます。
    m6settings

    次にAndroidバージョンと表示されている項目を連打します。それなりに早く連打しないと認識しないようにできています。裏技みたいなものなので、偶発的に起こる可能性を低くしているのでしょう。
    m6terminalinfo

    コマンドが認識されると以下のようにマシュマロっぽいドロイド君が現れます。
    m6fb

    このイラストをタップしたりタッチしたりすると反応します。これをいじるとゲームが始まるようになっています。何故こんな風になっているのかは遊び心の結果だと思います。

    ゲームを始めまでが非常に長いです。
    マシュマロをタップしたり、タッチし続けたりしていると突然ゲームが始まります。何を条件にスタートしているかわかりませんが、いじった回数とかもあるんじゃないかと感じます。 

    Android6.0でのゲーム画面は以下のようになります。マシュマロによってプレイヤーが止められます。
    タッチしている間ドロイド君が浮いていきます。障害物を潜り抜けられそうになるタイミングで放すことでゲームは続きます。何回通り抜けられたかを競うゲームです。
    m6fb3

    このゲームは「Flappy Bird」というゲームを元に作られているらしいです。難しくて本家の方も話題になったようです。
    超難しい設定になっているので10回くらいくぐれたらすごいと思います。

    ちなみにAndroid 4.4とかでも同じ手順で隠し機能があります。 いつからあるんでしょうか?

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Google Playの規約について以前記事を書きました。Androidアプリで見かける明らかな違反としてレビューについて説明します。(評価が★のことでレビューはコメントのことのようです。どちらも含めてレビューと呼ばれることが多い気がします。)
    企業のものでも見かけますし、意外と違反しているアプリは身近にあるように感じます。これらは当然通報(アプリの情報欄で不適切なアプリだとGoogleに報告することを指します。)することができますので、開発側としては大きなリスクを取ることになります。通報されて問題ないなら、なんでもありませんが違反ですのでGoogleとしても何かしらの対応をする可能性があります。基本的にはアプリの削除が行われるでしょう。

    評価やレビューを操作しようとしてはいけません。公式による説明はこちらです。
    星5をつけてくださいと書いたり、良い評価をしてくださいと言ったりすることは評価の操作にあたるので禁止されています。曖昧な表現だから許されるわけではありません――むしろ悪意が感じられるのではないでしょうか。
    書きたくなる気持ちはよくわかります。良い評価をされることでアプリをダウンロードする人を増やせるでしょうし、おそらくランキングにも良い影響があるのでしょう。しかしながら、これは評価を不当にゆがめることであり、結果ユーザーを騙すことになります。レビューが当てにならなくなると最終的にストア自体の価値も下がり、長期的には全ての開発者に不利益を与えることになるでしょう。
    違反する人がそんなことまで気を配るとは思えませんが、アプリが削除されるようなことになったら流石に気にするでしょうね。

    評価やレビューをしたら、何らかの報酬をあげることは禁止されています。公式による説明はこちらです。「ユーザーの評価の勧誘」という項目です。
    評価やレビューを求めるダイアログを出すこと自体は規約違反にはなりません。方法に限らず評価やレビューをすることに対して、何らかの報酬をあげてはいけないのです。
    報酬目的で行ったレビューに意味はありませんから、禁止されているのだと思います。

    この記事を読んで違反していることに気づいたらすぐに修正すべきでしょう。
    他にやっている人がいるから自分もやっても良いんだというような人は迷惑なだけです。小さな違反はいずれ大きな違反をもたらします。そして厳しいルールと監視の下で過ごしていくことになるのです。
    アプリの世界の自由さを自分勝手に振舞って良いと勘違いするようなことは、自身の品位を貶めるだけなのだと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Android SDKのアップデートは、SDKをインストールしたフォルダにあるSDK Managerを実行してアップデートしたいものを選択していけば良いです。
    asdk-installmenu
     
     上の画像のようにアップデートがあるものについて選択されて開きます。基本的には全てアップデートすれば良いと思うので、右下のInstallボタンを押して進めます。

    ボタンを押すと、アップデートするものについての同意画面が開きます。同意しないと当然進めないので同意してInstallボタンを押します。後は待つだけで勝手にダウンロードとインストールを行ってくれます。
    うまく行く場合はこれで終了です。
    asdk-accept

    私がやったときはエラーが発生しました。アクセスが拒否されたといくつか表示されています。これを何とかしないとアップデートができません。
    asdk-deny

    エラーの原因は管理者として実行していないからでした。管理者として実行したいSDK Managerを選択した状態で右クリックのメニューにある管理者として実行を押します。
    これで実行したところエラーが発生せずパッケージの更新が完了できました。
    asdk-admin

    WindowsでAndroid SDKの更新を行う時は、管理者として実行しなければならないという教訓を得ました。


    【追記 】
    Twitterで原因について教えてもらったので、追記しておきます。 

    上で書いた内容はAndroid SDKがProgram Filesに入っていたから発生するようです。Program Files以下は特別な領域なので、編集するには管理者権限が必要だということです。
    Desktopやユーザーごとのフォルダ等の普通のフォルダにSDKがある場合は特に問題なく実行できると思います。(Desktopで試したところ問題は発生していませんでした。)

    このページのトップヘ