仕組み
再配布を防ぐために、インストーラ チェックがアプリのコードに追加されます。インストーラ チェックに失敗した場合、Google Play でアプリを入手するよう求めるメッセージがユーザーに表示されます。インストーラ チェックは次の目的を念頭に設計されています。
- 有料アプリの著作権侵害を防ぐ: Google Play プロテクトで保護されたバージョンのアプリを非公式の提供元から入手したユーザーに対して、アプリを Google Play で購入するよう求めるメッセージを表示します。
- 正式なアップデートを受け取るようにユーザーに促す: 改変されていない Google Play バージョンのアプリをサイドローディングしたユーザーに対して、進行中のアプリのアップデートを受け取れるように、正式なバージョンを入手するよう促すメッセージを表示します。
インストーラ チェックをセットアップする
インストーラ チェックの使用を開始するために必要な作業は以下のとおりです。セクションをクリックして開いてください。
インストーラ チェックでは、アプリのコードに Google Play のライセンス チェックを追加して、アプリにアクセスしているユーザー アカウントが正規のソースからインストール(ライセンス認証)されているかを確認します。確認できなかった場合は、ストアのカスタム掲載情報からアプリを入手するようユーザーに促すメッセージが表示されます。
特定のアプリで自動保護を有効にした場合、デバイスに配布する準備が整った各リリースを作成すると、Google Play によって自動的に保護機能が追加されます。この保護機能により、変更された APK を Google Play が作成し、デベロッパーに代わって署名することが求められます。そのため、デベロッパーは次の作業を行う必要があります。
- Play アプリ署名を使用する。
- Android App Bundle を使って公開する。
- 最小 API レベル 23 以上を対象とする。
以下の制限事項にご注意ください。
- 自動保護は Android 6.0 Marshmallow(API レベル 23)以降でのみサポートされています。Android M は 2015 年にリリースされており、2023 年の時点では、23 以上の midSDKVersion を対象にすることで、有効な Android デバイスの 97% 以上にリーチできます。
- 自動保護は、ABI x86、x86_64、armeabi-v7a、arm64-v8a に対応しています。アプリのターゲット ABI を更新するには、Gradle の設定を更新します。アクティブな Android デバイスで使用されていないその他の ABI は、アプリの可用性に影響を与えることなくターゲットから削除できます。
- 自動保護はオフラインで動作します。ただし、Google Play ストア アプリが長期間オフラインだったデバイスでは、[Google Play からのインストールを必要とする] 機能によって、定期的にデータ接続が必要となります。
- すでにアプリで Google Play ライセンス サービスを使用している場合は、[Google Play からのインストールを必要とする] を無効にする必要があります。
- アプリを内部アプリ共有にアップロードする場合、保護機能は適用されません。内部アプリの共有リンクは信頼できるチームメンバーとのみ共有するよう十分に注意してください。保護されていないバージョンを外部と共有しないでください。
- 完全性保護はコードの変更を伴うため、自動保護は App Bundle のコード透明性に対応していません。自動保護が有効な場合、コード透明性が付与されてアップロードされた App Bundle は拒否されます。
- Instant エクスペリエンスは保護の対象外です。保護の対象にするには、リリース トラックの App Bundle を Instant 対応にしないでください。保護対象の App Bundle をリリース トラックにアップロードし、保護の対象外にする Instant 対応 App Bundle を Instant App 専用トラックに同時にアップロードすることもできます。
「リリースを準備して公開する」のステップ 1 の説明に沿って、リリースを作成します。
リリースを作成するときに保護機能を有効にすることができます(リリースを準備して公開するのステップ 2 を参照)。または、[アプリの完全性] ページ([テストとリリース ] > [アプリの完全性])で保護機能を有効にすることもできます。[アプリの完全性] ページには、アプリやゲームで意図したとおりのユーザー エクスペリエンスを実現するための完全性と署名のサービスが含まれています。
リリースを準備するときに、[整合性保護を有効にする] または [完全性の保護の管理] というボタンが表示されます。次に、[自動保護] で [オンにする] をクリックすると、完全性の保護を有効にできます。Google Play でリリースへの署名と完全性保護が行われ、改ざんや不正な配布が制限されます。これは、自動保護がオンになっていることを表します。
リリースの準備を完了し、変更を保存します。
各テストトラックを使用して、保護されたアプリ バージョンをテストし、ユーザー エクスペリエンスやパフォーマンスに予期しない影響が生じないことを確認します。
確認には以下の手順を含めることをおすすめします。
- ゲームの起動をテストして、起動時のクラッシュや起動時間の速度低下がないか確認します。
- ネイティブ コード(C / C++)が(独自のコードまたはサードパーティ ライブラリの)Java にコールバックする時点をテストします。たとえば、広告、ロギング、ソーシャルとの統合、認証、Android 固有の機能(権限の処理など)が挙げられます。
テストプロセス中に問題が見つかった場合は、(以前のリリースですでに使用していた)以前のバージョンの自動保護に戻すことができます。または、Automatic Integrity Protection を無効にすることもできます。保護されていないバージョンをオープン トラックや製品版に昇格させないことをおすすめします。
個々のリリースで完全性保護機能をオフにする方法は次のとおりです。
- リリースを準備するときに、[完全性の保護の管理] をクリックします。
- [自動保護] で [以前の保護] または [このリリースの保護をオフにする] を選択します。
- 変更内容を保存します。変更はこのリリースに適用されます。次回リリースをアップロードするときに、最新かつ最強の保護機能がリリースに再び適用されます。
準備が整ったら、Google Play Console でリリースを製品版トラックに公開できます。選択した国のすべての Google Play ユーザーに保護されたアプリが公開されます。
インストーラ チェックに失敗したユーザー向けにストアの掲載情報をカスタマイズする
自動保護機能であるインストーラ チェックは、アプリを非公式に入手したユーザーに対して、Google Play でアプリを入手するよう促すメッセージを表示します。ユーザーがダイアログをタップすると、ストアの掲載情報にリダイレクトされます。そこに表示されている [インストール](または [購入] や [更新])ボタンをタップすると、Google Play からアプリを入手できます。
完全性保護のダイアログをタップしたユーザー向けに、ストアの掲載情報のアセット(アプリの名前、アイコン、説明、画像、映像など)をカスタマイズできます。完全性保護のダイアログからユーザーがアクセスしたときのストアの掲載情報をカスタマイズする方法は次のとおりです。
- Google Play Console を開き、[アプリの完全性] ページ([テストとリリース ] > [アプリの完全性])に移動します。
- [Play Integrity API] セクションまでスクロールします。
- [設定] をクリックします。
- [ストアの掲載情報のカスタマイズ] セクションまでスクロールします。
- [掲載情報の作成] をクリックします。
- [ストアのカスタム掲載情報を作成] ページの指示に沿って操作し、[保存] をクリックします。
[ストアのカスタム掲載情報] ページから、完全性保護ダイアログ用のストアのカスタム掲載情報を直接作成することもできます。
- Google Play Console を開き、[ストアのカスタム掲載情報] ページ([ユーザーを増やす] > [ストアのカスタム掲載情報])に移動します。
- [掲載情報の作成] をクリックし、新しい掲載情報を作成するか既存のリスティングを複製するかを選択して、[次へ] をクリックします。
- [掲載情報] で [ターゲット ユーザー] までスクロールします。
- [URL] を選択し、テキスト ボックスに「playintegrity」と入力します。
- その他の情報をすべて入力して、[保存] をクリックします。
ヒント: URL パラメータ「playintegrity」は完全性のディープリンク用に予約されている特殊なキーワードであるため、ストアのカスタム掲載情報を設定する際に一字一句正確に入力する必要があります。
おすすめの実装
アプリの保護されていないバージョンを公開しない
保護されていないバージョンをオープン トラックに公開したり、Google Play 以外のチャネルで公開したりすると、アプリの保護機能は動作しなくなります。アプリの完全性保護機能を維持するには、アプリの保護されたバージョンをオープン トラックと製品版にのみ公開する必要があります。
改ざん対策を組み合わせる際は注意する
自動保護は、ランタイムで実行される他の改ざん対策との互換性がない可能性があるため、併用するとユーザーに問題が発生する恐れがあります。すでにアプリに Google Play ライセンス サービスを実装している場合は、[Google Play からのインストールを必要とする] を無効にする必要があります。アプリで他のランタイム チェックが実行される場合は、オープン トラックに公開する前に、保護されたアプリを十分にテストしてください。
保護されたアプリをテストする
Google Play はすべてのトラック(内部テスト、クローズド、オープン、製品版)にわたって、保護されたビルドを自動的に配布します。これらのバージョンを通常どおりに十分にテストする必要があります。
アプリのビルドを内部アプリ共有に直接アップロードした場合、Google Play は保護機能を追加しません。これは、内部アプリ共有を使用して、デバッグビルドやその他の類似のビルドをアップロードできるようにするためです。
App Bundle エクスプローラで保護されたアプリ バージョンの内部アプリ共有リンクにアクセスすると、ビルドは Google Play で処理されたとおりの状態で共有されます。そのアプリ バージョンがテストトラックにアップロードされて保護されていた場合、App Bundle エクスプローラの内部アプリ共有リンクからは保護されたバージョンが配布されます。保護機能のステータスは App Bundle エクスプローラの [詳細] タブで確認できます。
クラッシュをモニタリングする
アプリが保護されている結果としてクラッシュ数が増えることがあります。これはおそらく、自動保護が想定どおりに機能していることを示しています。攻撃者がアプリの改変に失敗した場合、ランタイム チェックは主にアプリをクラッシュさせることで、アプリの実行を停止します。
Google Play に起因しないクラッシュは、Android Vitals の安定性の指標には影響を与えません。他のツール(Crashlytics など)を使用してクラッシュを分析していて、インストール元でフィルタする際にパッケージ名が必要になる場合、Google Play ストアのパッケージ名は「com.android.vending」です。
クラッシュ数の異常な増加について懸念されている場合は、できるだけ詳しい情報を記載して Google までお知らせください。担当チームが調査いたします。クラッシュが保護機能に関連していることが判明した場合は、適切に対応いたします。
アプリのクラッキングされたバージョンを報告する
クラッキングされたバージョンとは、改変された場合または Google Play からのインストールが要求される状況で Google Play の外部からインストールされた場合においても、機能しているアプリのバージョンのことです。
アプリのクラッキングされたバージョンを特定した場合は、Google までお知らせください。
関連コンテンツ
- 自動保護に関する動画をご覧ください。
- Google Play Console の完全性と署名のサービスについてご確認ください。
- Android デベロッパー サイトの完全性と署名のサービスについてご確認ください。