2014年10月5日日曜日

キーストアとフィンガープリント

今回、非常に面倒な事態に直面しまして、土曜の朝にイライラは頂点に達しました。 詳細は割愛しますが、Google game services (ゲームサービス)関連ですね。 しかし、最近ずっと疑問に思っていたキーストア関連の何やかんやが スッキリしたので、まとめてみたいと思います。 今回も android でアプリを作る方にとってみれば、非常に役に立つ内容です。

ゲームサービスの導入に関しては先人達が丁寧に解説してくれていますので、 ここでは apk公開後(Google Play に掲載してから)のアクセス、この一点に絞って解説していきたいと思います。

apkファイルを作る際にキーストアが必須となります。 とあるアプリ "X" が公開され、のちにバージョンアップ版が公開されるということは多々ありますが、 最低限のルールが二つ。
・パッケージネームが同一でなければならない
・デジタル署名が同一でなければならない

なので、同一のパッケージネームの同一アプリ―――それのバージョン2を別のキーを使って apkファイルを作ったら…。 下記のような警告文がグーグルさんから発せられて apkファイルを受け付けてくれません。


 アップロードできませんでした

以前の APK とは異なる証明書で署名された APK をアップロードしました。
使用する証明書は同じである必要があります。
既存の APK はフィンガープリント「

[ SHA1: 26:86:47:FD:■■:■■:■■:■■:■■:■■:AB:E1:97:E7:48:C4:E9:60:6D:B7 ]

」の証明書で署名されていますが、
アップロードした APK の署名に使われている証明書のフィンガープリントは「

[ SHA1: 6B:02:EB:C3:■■:■■:■■:■■:■■:■■:8A:D7:C5:EA:DC:0B:84:33:64:56 ]

」です。

(一部■で塗りつぶしております)

もし、一発目のapkファイル(Google Play に製品版としてアップロードしたもの)と違う署名で apkファイルを作って アップロードしようとすると上のように指摘されてしまう。 まあよく分からないんですけど、apkファイルを作る際にキーストア(key store selection)ともう一つ(key alias selection)がある。 キーストアの方は別にdebug.keystoreでいいのだが、 key alias の方は別途作らないといけないと思う。色々なアプリで一つのキーエイリアスを使い回すっていうのは??? できるでしょうけど。。 キーストアもキーエイリアスも一発目(処女版、version1.01)を作ったときに設定したものが基準となるので、 それ以降のアップデータでは同じキーを使わなければならない。 で、最終的に apkファイル=公開版ファイルのフィンガープリントがどうなっているかっていうのは、 apkファイルが完成する最後の最後のページ(あとはfinishを押すだけ)で確認できる。 このタイミングで確認できる SHA1 をコピーしてゲームサービスの方に張り付ければ、公開後のアプリとゲームサービスがきっちり噛み合うんじゃないだろうか?

私もググって見つけた個人で書かれたサイトを寄せ集めて参考にして、 リリース前のテスト状態でうまく立ち回ることができた。 Google の公式解説も英語であるということを抜きにしてもよく分かりません。 で、どのサイトを見ても debug.keystore のフィンガープリントを取得してゲームサービスのサイト上でそれを登録するという一連の流れ。 そして、リリース後も署名を同一のものにしないといけないよという注意。 こういうことが書かれていたと思う。 Eclipse を搭載しているPCとデバック用実機スマホをUSBでつないで、テストというかデバッグをされると思う。 このときは、debug.keystore のフィンガープリントが使われていると思う。 事実、テスト段階ではグーグルゲームサービスとの接続に成功するんだから(ゲームサービスにdebug.keystore のフィンガープリントを登録している場合!)。 しかし、実際に apkファイルを作成する場合は上述のキーエイリアス次第で SHA1 が変わってくる。 えっ、ちょっと、debug.keystore のフィンガープリントって関係なくね?

結論から言うなら
①テスト用のゲームサービスを作る(debug.keystore のフィンガープリント)
②ライブラリの導入やメインアクティビティの一部変更などといった必須作業を行う。
③実機でテストを行う。とりあえずサインインできたら成功。私は実績とリーダーボードも試してみた。
④Eclipse で apkファイルを作るふりをする。このときにキーエイリアスを確定する。最終画面でSHA1 をコピー。
⑤④で得たフィンガープリントを使ってもう1回ゲームサービスを登録する。
なんで?なんで?二度手間じゃん。と思うでしょうが、おそらく一度フィンガープリントを入力してしまうと後から変更できませんから。

いいですか? 実際に公開する用の apkファイルを作る際に用いる「キー」。 その署名情報(SHA1)をデベロッパーコンソールのゲームサービスに入力します。 " debug.keystore " のフィンガープリントを取得して入力しろ。 みたいに書いているんですよ、巷のウェブサイトには。怖いですねぇ。これじゃあ、うまくいきませんねぇ。

しかし、先人たちの経験とレクチャーによって少しずつ近いづいていったのは事実です。 その情報は完ぺきではなかった。ただ、それだけのことです。 テスト段階(公開しない状態)で使ってみてうまくいきました、終了、という方が多かったんじゃないでしょうか?

実績を達成したら、レベルが上がりました。 このレベルはあらゆるゲームアプリ(ゲームサービスに加入しているものに限るが)で、累積されていくようです。 つまり、いろんなゲームをやりまくったヘビーユーザーはレベルが凄いことになっていそうです。 今回、初のソーシャルメディア化に挑戦してみましたが、自前でサーバーを用意したりすることを考えれば、とても気軽に行えます。 欠点として、アプリの容量は大きくなりますが(拙作も無駄に10MB)、最近のスマホはギガなわけで、気にするほどでもないでしょう。 アンドロイド黎明期、今から4~5年前くらいの本には容量は小さくしないとダメだってしつこく書いていましたが、 時代は変わったものです。

0 件のコメント:

コメントを投稿