テストステ論

高テス協会会長がテストステロンに関する情報をお届けします。

(etiles report) リーダーボードの改善をしました

イータイルズにとってリーダーボードは生命線です。そうでないプレイヤーがいてもいいとは思いますが、リーダーボードで上位を目指すことがプレイを続ける大きなモチベーションになるからです。

この3日間、リーダーボード周りの改善を行いました。

これがアカウントページです。

f:id:akiradeveloper529:20180520152828p:plain

実装上の判断を説明します。

  • バイス保有するID(ANDROID_IDやIDFV)は仕様がチンカスなのもありますが、RNを使う上ではAndroid/iOSで共通化した方がいい。また、デバイスIDを使ったログインをしてしまうと、デバイス乗り換えでアカウントを引き継ぐためにはbackup用のアカウント登録が必要になってしまい、これには典型的にはFBとの連携・email/passwdの登録が必要ですが、FBの連携は実装的にSDKのリンクが面倒なことと中国などFBが禁止されてる国もあるため使いにくい、後者はユーザが登録をしてくれなそうという欠点があります。そこで、ランダムに生成するUUIDv4を使って保存しています。これは実質的に衝突しないためアカウント乗っ取りが不可能です。情報漏えいにもケアして、デフォルトでは見えないようにしています。
  • 国旗はreact-native-country-picker-modalというライブラリを使っています。CCA2という二文字のアルファベット(例: JP)を取得出来るのですが、これを保存してかつリーダーボードで安価に取り出す方法は容易されていません。UserDataというK-V用の領域はあるのですが、独立性が高いAPIになっていて、リーダーボードの取得を行ったあと各ユーザについて個別にAPIを叩く必要が出ます。これは性能もそうですがエラーハンドリングでも不利になります。エラーハンドリングについて、ネットワークが安定していれば良いだけではなく、無料枠で使っていてSLAがない場合にはPlayFab側が自由にリクエストをドロップすることが許されますから、大量のAPIを瞬間的に行って、どれか一つでも落ちるとダメですという実装にするのは良いことではないです。そこで、記録などを保存するstat領域に保存しています。これならばリーダーボードの取得と同時に取り出せるからです。やり方は、2文字のアルファベットを整数に圧縮しているだけです。
  • Avatar用にはAvatarUrlという領域があり、PlayFabとしてはこれを使うことが推奨されています。この方法だと、PlayFabの管理画面でAvatarが使われたりします。このURLは自由で、Googleから自由に画像検索してきてもいいのですが、やめました。理由はまず、アス比1が強制されないこと。次に、ポルノや殺害など悪質な画像を使う人が現れるからです。そこで、ある程度チェックの効いていてアス比が約束されているサイトからURLを引くことにしました。最初はGravatarを使いましたが現在のユーザの全員が、この使い方を理解出来ませんでした。そこで次に、Twittterのアカウント画像を引く方法も追加しました。これならば理解出来ないユーザはいないと思います。Gravatarでは画像のアップロード時にどういうコンテンツなのかを選択させますし、Twitterではあまりに悪質な画像はBANされますから、悪質な画像を弾くという点では多少の効果があり、かつ両方ともアス比1の画像を引けるのでこの2つで行こうと思います。

現在のリーダーボードはこういう感じです。

f:id:akiradeveloper529:20180520152826p:plain

特徴としては国旗を入れているところです。アバターを入れるというのはどのゲームでもやることですが、国旗を入れるというのはなかなかやりません。この意図は、イータイルズが世界に広まった時に国家レベルの争いにしたいからです。イータイルズの成績は究極的には純粋な知能を反映します。これは一度プレイすれば分かることです。例えば冷戦時にイータイルズがあったとすると、アメリカの国旗が上位にあれば、ロシアは才能のある子に特殊訓練を施してイータイルズでもアメリカに勝ちに行ったでしょう。どことは言いませんが現代においてもそのような敵対関係はありますから、これを利用すればイータイルズが連鎖的に広まっていくのではないかと思いました。

イータイルズは今後も機能やデザインの改善を続けていきます。応援よろしくお願いします。現在ベータテストをしているAndroid版のダウンロードはGoogle Play Storeからetilesで検索してください。