少し不安に感じますか?クレジットカードに例えると、泥棒にクレジットカード番号を盗まれてネットで好きなだけ買物をされてしまうように、誰かに自分の API キーをコピーされて、Google Maps Platform で好きなだけ API コールをされる恐れがあります。そこで、意図する用途以外に API キー使われることを防ぐために、API キーを保護する必要があるのです。
API キーを制限しよう
API キーは、特定の HTTP リファラからしか使えない、ということを Google Maps Platform に設定することで、用途制限をかけることができます(参考記事)。これは、クレジットカードを特定の小売チェーン店でしか使えないようにことと同様です。しかし、それでもまだ、誰かに一か所の店舗で大量に使われてしまうリスクは防ぎきれません。
さらなるセキュリティ措置として、この API キーが Street View Static API の呼び出しにしか使えないようにする制限をかけることもできます。すなわち、このクレジットカードは書籍を買うためにしか使えない、と制限をかけるのに似ています。こうすることで、悪意ある第三者にとって、クレジットカードの利用価値は大きく下がります。
デジタル署名された URL を生成するには、 API リクエストと API キーを、Google Cloud コンソールが管理する URL 署名シークレットと組み合わせる必要があります。署名シークレットとは、指紋のように、個人しか持っていないものであり、リクエストされる URL とは書籍の ISBN コードのようなものです。つまり、指紋と ISBN の数学的組み合わせに基づいてデジタル署名が生成されます。これは、あなたが公に共有できるものです。例えば、皆さんがご自身のクレジットカードを使って、特定の書籍購入を許可すると伝えているのと同等です(この場合、 API キーを使って特定の静的画像読み込みを許可していることになります)。
Google Cloud コンソールにおいて URL にデジタル署名を行っている画面のスクリーンショット
Google Cloud コンソールを使ってデジタル署名を生成できます (Maps Static API および Street View Static API に関する手順はこちら)。または、デジタル署名を作成するために独自のサーバ側アプリケーションのコードを書くこともできます(文書の中にサンプルコードを記載しています)。デジタル署名は、皆さんの URL に添付されます。以下が、前掲のストリートビュー画像を読み込むために使える、署名された URL です。
静的な画像の URL にデジタル署名を追加する作業が済んだら、Maps Static API または Street View Static API へのキーを使ったデジタル署名を伴わないリクエスト件数の許容限界数をプロジェクトの中で低くすることで、さらにアカウントの安全度を強化できます。
この動画では、Google Cloud コンソールで量的制限値を管理する方法を示しています。Maps Static API と Street View Static API の量的上限値設定のページに関して、署名ありのリクエストの量的上限値、署名なしのリスクエストの量的上限値を管理する部分が、それぞれに設けられています。初期設定として、これら API を使ったプロジェクトは、1 日あたり 最大 25,000 件の署名なしリクエストを受付可能です。皆さんが API キーを使ってデジタル署名を伴った静的画像の URL のみを使用可能としたい場合は、この量的上限値を 0 に変更してください。
API キー、アプリケーション制限、API 制限、デジタル署名、量的上限値という 5 つのセキュリティ階層を設けることで、Google Maps Platform の認証情報を想定外に使用されてしまうのを防ぐことができます。ここで、前掲のストリートビュー画像を公開するために、5 つすべてを使用しました。したがって、たとえこの API キーが誰でも閲覧可能であっても、本ブログ上で、デジタル署名された要求先 URL によって、当該の Street View Static API を呼び出すためにしか使用できません。この特定のストリートビュー画像用の URL に基づいて、 1 つのデジタル署名しか作成していないため、この署名は他のどのストリートビュー画像に対しても機能しません。パノラマ画像のなかで向きを変えて別の角度から見ることさえできません。
クレジットカードの例えを最後まで当てはめるなら、次のようになります。クレジットカード番号を公開しましたが、同時に、クレジットカード会社に、そのクレジットカード番号は、パウエルズという書店からミゲル・ド・セルバンテス・サアヴェドラ Miguel de Cervantes Saavedra 作のペーパーバック書籍、『ドンキホーテ Don Quixote』を購入するためにのみ使うよう、指示を出したようなものなのです。 "El que lee mucho y anda mucho, ve mucho y sabe mucho."(よく読み、よく歩く人は、多くの事を見聞きし、多くの事を知る―「ドンキホーテ」からの引用)
Google Maps Platform に関する詳しい情報はこちらをご覧ください。ご質問やご意見はページ右上の「お問い合わせ」より承っております。
ハイライト表示されている部分では、使用されないキーを super に渡しています。これにより、Chrome OS は、割り当てがない各キーの機能を無効にすることなく必要なコマンドを処理できます。
更新キー
Chrome OS のキーボードには独自のキーコード(KEYCODE_REFRESH)を持つ更新用のキーがあるため、アプリで KEYCODE_REFRESH イベントを処理できるようにする必要があります。すでに SwipeRefreshLayout を使用している場合は、この更新キーを押すと Chrome OS によりレイアウトが自動的に更新されるようになります。
タッチパッド
ユーザーがタッチパッド搭載のパソコンでアプリを使用している場合、スクロール操作にタッチパッドを 2 本の指でスワイプすることが予想されます。一方モバイルの場合、通常、画面を押したままドラッグしてスクロールします。Chrome OS は、このようなタイプの異なるモーション イベントを自動的に解釈します。そのため、たとえば図形描画アプリの場合、モバイルでスクロールしたときに描画されることはありません。
Chrome OS 上のゲームとアプリは、ARM から x86 への変換が自動的に実行されます。ただし、パフォーマンスを優先する場合は x86 のサポートが不可欠です。主要な Chrome OS デバイスのほとんどが 64 ビット x86 チップセットを搭載しており、こうしたデバイスは今後ますます増えていくと思われます。すべてのデバイスで最適なパフォーマンスを提供できるよう、ネイティブ コードを使用する場合は、ARM、ARM64、x86、x86_64 をビルド対象にするようにしてください。
Android Studio ではこの手順を簡単に実装できます。Android App Bundle を使用すれば、すべてのビルド対象を Play ストア向けにパッケージ化して、アプリユーザーが必要なビルド対象のみを送信することができ、ダウンロード サイズを最小限に抑えられます。
Chrome OS で Android DocumentsProvider インターフェースをサポートするようになりました。
アプリのプロファイリングによるアニメーション ジャンクの検出
統合されたプロファイリング ツールを使用して、システムの状態(バッファの使用状況、垂直同期、CPU の使用状況、GPU と CPU の周波数、システムの温度など)を経時的にモニタリングし、アニメーションのジャンクやシステムの速度低下の原因を確認できます。
あらゆる画面で最適なエクスペリエンスを提供する
アプリの利用場面は、今やモバイルにとどまりません。デバイスとフォーム ファクタの多様化が進む現在、ユーザーにとって、アプリは設計が優れていていつでも使いやすいことが当然の前提となりつつあります。この機会に、さまざまな入力方法のサポート、画面サイズに応じたレイアウトやナビゲーションの最適化、追加の画面領域の活用、ネイティブ コードでの x86 のサポートなどに対応しましょう。
Chrome OS 向け Android アプリの開発についてさらに詳しく知りたい方は、2019 年の I/O で開催したセッションの動画をご覧ください。