Google Play ゲーム サービスの品質チェックリスト

ゲームの品質はインストール数、プレーヤーによる評価やレビュー、関心、プレーヤーの確保といった点でゲームの長期的な成功に影響します。ゲームを公開する前に、魅力的な機能や直感的で優れた UI デザインを提供し、ゲーム プレーヤーの基本的な期待値を満たせるよう準備することが重要です。

ゲームの成功に大きく影響する可能性のある品質、機能セット、UI といった主な要素を、このドキュメントでご確認いただけます。それぞれの最小要件、推奨、任意の改良項目をチェックリストにしてご紹介しています。プレーヤーに最良のサービスを提供できるよう、チェックリストにある推奨事項をできる限り取り入れることをおすすめします。

1. ログイン

ゲームにプレーヤーのログイン機能を実装する場合は、次のチェックリスト タスクをご利用ください。モバイルゲームでログインを実装する際のコード例について詳しくは、Android でログインを実装する方法についてのページをご覧ください。

ID 重要度 説明
1.1 必須 Google Play ゲーム サービスにログインするオプションをプレーヤーに提供する。

プレーヤーがログインできるよう、ゲームに次のいずれかの方法を実装する必要があります。

1.1.1. ゲームの起動時に、ログインを求めるプロンプトをプレーヤーに自動的に表示する

一般ユーザー向けのアプリでは、プレーヤーをすばやく認証して Google Play ゲーム サービスの提供するすべての機能を利用できるように、サイレント ログインを実装する必要があります。サイレント ログインに失敗した場合、対話形式でのログインを求めるプロンプトをプレーヤーに表示するようアプリを設定する必要があります。

プレーヤーがログインを辞退した場合、この操作を記憶してプロンプトがプレーヤーに再び表示されないようにします。代わりに、ログインボタンをご用意ください。ログインボタンは、プレーヤーが見つけやすい場所に設置します(たとえば、ゲームメニューから複数の階層を経た場所に埋め込むのではなく、メイン画面からアクセスできる場所に設置します)。

1.1.2. ゲームへのログイン方法を提供する
プロンプトが自動的に表示されない場合、プレーヤーにログインボタンを使用したログイン方法か、状況に応じたログイン方法(マルチプレーヤー型対戦の開始時、ハイスコアの送信時、または実績のロック解除時など)を提供する必要があります。ログインボタンには、Play ゲームアイコンを組み込む必要があります。
1.2 必須 ログイン クライアントの作成時に不要なスコープを要求しない。

GoogleSignInOptions 構文から、不要なスコープや使用していない API を削除します。

たとえば、Google ログイン クライアントを作成するときは Google+ のスコープを要求しないでください。要求しないようにすることで、新規ユーザーが不要に(1)Google+ アカウントを作成し、(2)追加の同意画面を確認することがなくなります。


// This way you won’t get a consent screen
GoogleSignInOptions signInOption = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
1.3 必須 プレーヤーのログイン状態を維持する。

プレーヤーがゲームに正常にログインした後は、プレーヤーが明示的にログアウトしない限り、ゲームが開始されるたびにプレーヤーを自動的に接続します。

1.4 必須 ログアウトする方法をプレーヤーに提供する。

ログインしたプレーヤーには、ログアウト方法を必ず提供する必要があります。Play ゲーム SDK で提供されているデフォルトの実績やリーダーボードの UI にはすでにログアウト方法が含まれているため、これらの UI にログアウト ボタンを実装する必要はありません。

アプリの他のゲーム画面では、ログアウト方法の提供を検討してください。たとえば、次のようなログアウト ボタンを設置します。

「Type-a-Number」サンプル、メイン メニュー、ログイン
1.5 必須 プレーヤーがログインを辞退したかどうかを記憶する。

ゲームの初回ログインフロー時にプレーヤーがログインを辞退した場合(ログイン UI で [キャンセル] をクリックした場合など)でも、プレーヤーが引き続きゲームをプレイできるようにします。

プレーヤーがゲームを再び起動したときに、ログインフローを自動的に呼び出さないようにします。呼び出さないようにすることで、プレーヤーはゲーム開始のたびにログインを繰り返し辞退する必要がなくなります。

ただし、プレーヤーがログイン必須のゲームプレイ機能(マルチプレーヤー型対戦の開始など)にアクセスを試みる場合は例外です。このような場合は、ゲームプレイを続ける前にログインを求めるプロンプトを表示します。

1.6 推奨 ログインしているプレーヤーの数を最大にする。

多くのプレーヤーが Google Play ゲーム サービスにログインすれば、ゲームプレイにおいて協力や競争の機会が増えるため、プレーヤーのメリットとなります。Google Play ゲーム サービスにログインするプレーヤーの数を増やすには、前述のようにログイン プロンプトをプレーヤーに自動的に表示することを強くおすすめします。

または、次のいずれかの時点でプレーヤーをできるだけ早くログインフローに誘導します(推奨順)。

  • ゲーム開始直後
  • カットシーンやチュートリアルといった導入部の直後
  • プレーヤーがゲーム内の任意の場所で Google ログインボタンをクリックしたとき
1.7 任意 Google のブランドの取り扱いガイドラインに準拠する。

魅力的で一貫したエクスペリエンスをプレーヤーに提供できるよう、Google Play ゲーム サービスのブランドの取り扱いガイドラインを適用してください。

1.8 任意 ログイン状態であることをプレーヤーに通知する。

ゲームで特定のアクションが自動的に実行される際に、ログインしているプレーヤーに対して適切な通知またはヒントを表示します。たとえば、ログイン プレーヤーが特定のレベルをクリアした場面で、次のようなメッセージを表示してスコアと実績が自動的にアップロードされることを伝えます: 「You are signed in with Google. Your achievements and scores will be saved automatically.(Google にログインしているため、実績とスコアは自動的に保存されます。)」

1.9 任意 ログイン中に「接続中」ポップアップを正しく表示する。

Android デバイスでは、ログインフローが呼び出されるたびに Google Play ゲームの「接続中」ポップアップがデフォルトで表示されます。プレーヤーがゲーム起動後に自動ログインする際に、Android でこのポップアップが表示されることを確認してください。

UI 操作(ログインボタンのクリックなど)によってプレーヤーのログインを行う場合は、必要に応じてポップアップの表示を制御することができます。ポップアップの表示を制御する方法について詳しくは、Android でログインを実装する方法についてのページをご覧ください。

次の例では、ログイン中に Android ゲームで「接続中」ポップアップが表示され、その後に続けて Google Play ゲーム サービスのロゴの短いアニメーションが表示される様子を示しています。

「接続中」ポップアップが表示されたスクリーンショット
1.10 任意 プレーヤーのゲームの進行状況の紛失を避ける。

可能であればプレーヤーのゲームの進行状況をローカルに保存し、プレーヤーが次にログインしたときにその進行状況を同期するようにしてください。プレーヤーがゲームへのログインを辞退した際に、ゲームの進行状況のデータが失われるのを防ぐために役立ちます。

2. 実績

ゲームに実績機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
2.1 必須 すべての実績を必ず獲得できるようにする。

作成されたすべての実績のロック解除をプレーヤーが行えるようにします。

2.2 推奨 実績を明確にする。

画像、テキスト、説明をすべての実績で一意にします。

2.3 推奨 実績のスコアを適切に記録する。

実績のポイントは、その実績を獲得するのに必要な時間またはスキルの量に比例する必要があります。

2.4 推奨 さまざまな難易度レベルの実績を設計する。

プレーヤーが気軽にゲームをプレイして獲得できる簡単な実績をいくつかと、スキルやプレーヤーの努力が必要な中級の難易度の実績を複数、熱心なプレーヤー向けの獲得が非常に難しい実績を 1 つか 2 つ取り入れます。

次のスクリーンショットは、獲得が難しい実績の一例です。こうした実績によって、プレーヤーのやる気を高め、関心を維持します。

ジェム 5,000 個の獲得が必要な難易度の高い実績
2.5 任意 早い段階で実績を授与しない。

まだ熱中していない新規プレーヤーに、ゲームプレイ開始 5 分間で複数の実績を授与することは避けましょう。

実績がゲームプレイの初期段階で意図せずに授与されることのないように定義してください。たとえば、「ダメージを受けずにレベルをクリアする」といった、ゲームの初期段階でも簡単に獲得しやすい実績には注意してください。

2.6 任意 魅力的なゲーム内アクティビティに関する実績を定義する。

ゲームの魅力を高め、もう一度プレイしたくなるような実績を構築できる指標を設定してください(たとえば、「倒したゾンビの数」は「キャラクターの歩数」よりも高い関心を得られる指標です)。

2.7 任意 色付きの実績アイコンを使用する。

Google Play ゲーム サービスでは、実績を獲得済みかどうかを示すためにグレースケール バージョンの実績アイコンを使用します。真っ黒(または真っ白)の実績アイコンを使用しなければならない場合は、これらのアイコンを色付きの背景に表示します。

2.8 任意 非公開の実績の使用を最小限に抑える。

実績を非公開とするのはゲームのネタバレを避ける場合のみとし、標準的に実績を非公開にしないようにしてください。

2.9 任意 運に頼りすぎる実績は避ける。

「宝箱に入っている可能性が 1% のアイテムを見つける」実績よりも「宝箱を 100 個見つける」実績をおすすめします。

2.10 任意 「実績ハンター」の立場で考える。

中には、すべての実績を獲得しようとするプレーヤーもいます。このようなプレーヤーの要望に応える実績を用意するようにしてください。プレーヤーが制御できない要素に頼りすぎたり、プレーヤーがゲーム中になんらかの決断を下した後は獲得できなくなったりする実績は作成しないでください。

2.11 任意 実績アイコンが正しく表示されることを確認する。

Android トーストで実績アイコンを表示すると、アイコンは円形で囲まれ、その外側の角は表示されなくなります。このような状態でも、アイコンがきれいに表示されることを確認してください。

3. リーダーボード

ゲームにリーダーボード機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
3.1 推奨 メインメニューと主な場面遷移の後にリーダーボードが表示されるようにする。

リーダーボードは、ゲームの読み込み時にすぐにアクセスできるようにします。ゲーム内で重大な場面遷移があった後(レベル終了時やプレーヤーの死亡時など)は、すぐに関連するリーダーボードへのリンクをプレーヤーに表示します。

3.2 推奨 送信できるスコアの上限を定義する。

可能であれば、スコアが明らかに虚偽である場合はリーダーボードの定義時に破棄されるよう制限を追加してください。

3.3 推奨 カスタム アイコンを使用する。

定義した各リーダーボードのカスタム アイコンを作成します。Google Play ゲーム アプリでは表示が粗くなるため、ゲームのアイコンをそのまま使用しないでください。

3.4 推奨 スコア送信の頻度を適切に設定する。

レベルの終了時やプレーヤーのゲーム キャラクターの死亡時など、ゲーム内の重要な場面遷移の後にスコアを送信します。重要な場面遷移がないゲーム(「エンドレス ランナー」系のゲームなど)の場合は、スコアを送信する頻度を適切に判断してください。連続して、または毎秒スコアを送信することは避けます。

3.5 任意 スコアタグを利用する。

スコアタグとは、スコアの送信時に追加できるデータのことです。たとえば、プレーヤーの送信スコアが有効であることを確認するフラグとしてスコアタグを実装できます。

カスタム リーダーボードにも、このタグデータを読み込むことができます。スコアタグがプレーヤーのゲームプレイを含む YouTube 動画の ID で構成されている場合、ゲームのリーダーボード内にそのビデオを表示するためのリンクを作成することができます。

3.6 任意 独自のリーダーボード UI をクリエイティブに設計する。

リソースがある場合は、ソーシャル リーダーボード データ上に独自のカスタム リーダーボード ビューを作成します。通常、プレーヤーにとってソーシャル リーダーボードは公開リーダーボードよりも魅力的なものになります。まず、ソーシャル リーダーボードのエントリがあるかないかを確認し、ない場合は代わりに公開リーダーボードを使用してください。

3.7 任意 競争順位をプレーヤーに示す。

リーダーボードの API では、スコア ウィンドウの表示がサポートされています(たとえば、+/-10 位以内のプレーヤーのランキング)。カスタムビューを作成している場合、これはプレーヤーの関心を高めるのに有用です。スコア ウィンドウは、ゲームの重要な場面遷移(レベルの終了時やプレーヤーのゲーム キャラクターの死亡時など)の直後に表示できます。プレーヤーがクリックすることなく、ランキング情報を確認できるようにします。

4. マルチプレーヤー(一般)

ゲームにリアルタイム マルチプレーヤー機能またはターン制マルチプレーヤー機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
4.1 必須 ゲームで招待機能を使用している場合は、プレーヤーがマルチプレーヤー型対戦に参加できるようにする。

ゲームでマルチプレーヤーの API を使用してルームまたはターン制の対戦を作成しても、プレーヤーのマルチプレーヤー型対戦への参加が許可されない場合、これはサービスの悪用と見なされ、Google Play ゲーム サービスへのアクセスがブロックされる可能性があります。

4.2 必須 Google Play ゲーム サービスの利用規約を理解し、遵守するようにする。

Google Play ゲーム サービスで通常共有される情報以外に、マルチプレーヤー型ゲームでプレーヤーの個人情報を他のプレーヤーと共有するには、プレーヤーの明示的な許可が必要です。

4.3 推奨 プレーヤーが対戦を直接開始できる「クイック対戦」ボタンを提供する。

プレーヤーは、自動対戦機能を使用してランダムに選択された対戦相手と対戦を始めることができます。クラムジーバードで実際の例をご確認いただけます。

4.4 推奨 ゲームへの招待を受けたことをプレーヤーに知らせる。

招待を受け取ったことをゲーム中のプレーヤーに通知できるよう、デベロッパーは招待のコールバックを実装する必要があります。

4.5 推奨 プレーヤーを対戦に直接移動する。

プレーヤーがマルチプレーヤー型対戦の招待をクリックして承認したら、そのプレーヤーを該当する対戦に直接移動します。この動作を実装するには、Google Play ゲーム サービスからゲーム クライアントに渡される connectionHint パラメータの対戦情報を使用できます。

4.6 推奨 Android ゲームがバックグラウンドで動作しているときに招待を適切に処理する。

ゲームがバックグラウンドで動作している間、ゲームのマルチプレーヤー招待のコールバックは受け取った招待を処理し続けます。招待が処理され続けることで、招待が通知シェードに表示されなくなり、プレーヤーがこれらの招待を承認できなくなります。

アクティビティの onPause() で、コールバックの登録を解除することをおすすめします。解除に失敗した場合、システムは自動的にコールバックを解除し、警告を発します。すべてのコールバックが解除されると、通知は正しくシェードに表示されます。

4.7 推奨 ビットマスクやバリエーションを使用するときは、プレーヤー プールを過剰に分割しない。

プレーヤー プールが小さければ小さいほど、プレーヤーが自動対戦機能によりゲームに参加するまでの待ち時間が長くなります。

4.8 推奨 他に選択肢がない場合にのみ、バリエーションやビットマスクを使用する。

期待どおりのゲームをプレイできなかった場合、プレーヤーがゲームを止めそうかどうかを考慮してください。プレーヤーが止めそうなゲームは、マルチプレーヤー型対戦を開始するまでの間にプレーヤーが選択できるバリエーションを提供します。そうでない場合は、対戦相手の決定後にのみプレーヤーにゲームタイプを選択させることを検討します。

4.9 任意 マルチプレーヤー型対戦が終わった後に、簡単に再プレイできるようにする。

マルチプレーヤー型対戦の終了後は、同じ対戦相手との再戦を開始するか、新しい対戦相手との新しい対戦を開始するかのどちらかでプレーヤーが直ちに再プレイできるようにします。

5. リアルタイム マルチプレーヤー

ゲームにリアルタイム マルチプレーヤー機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
5.1 推奨 リアルタイム マルチプレーヤーのルームを整理する。

ルームから適切に退出しないと、Google Play ゲーム サービスはイベントの通知や招待の通知をクライアントに送信し続けます。次のいずれかが発生した場合は、必ずアクティブなルームから退出する必要があります。

  • ゲームプレイが終了した(例: プレーヤーが対戦に勝利した)。
  • ゲームがバックグラウンドで動作している。
  • Android では、次の場合にルームから退出します。
    • プレーヤーがロビーの UI でゲームをキャンセルした場合。
    • onActivityResult() コールバックで返された応答コードが GamesActivityResultCodes.RESULT_LEFT_ROOM の場合。
    • Activity onStop() が呼び出された場合。この場合は、Activity が破壊されていることを示す可能性があります。このような場合は、ルームから退出して disconnect() を呼び出します。

6. ターン制マルチプレーヤー

ゲームにターン制マルチプレーヤー機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
6.1 推奨 注意が必要なターン制の対戦についてプレーヤーに警告する。

メインメニューのマルチプレーヤー型ゲーム オプションの横に小さなアイコンまたは数字を追加して、プレーヤーが交代の順番や、招待の承認待ちの対戦を示すことができます。1941 フローズン フロントで実際の例をご確認いただけます。

6.2 任意 各ターンは 15 秒以上かかるように設計する。

高速でターンが入れ替わるようなゲーム設計は避けてください。ゲームでの API の割り当て制限超過や、プレーヤーがターン通知を正しく受け取れない原因となるスパムのような動作を防ぐためです。

7. ギフトとリクエスト

ゲームでゲームギフト機能を使用している場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
7.1 必須 明示的な承認を得ずにプレーヤーにゲームギフトを送付したり、リクエストしたり、受け取ったりしない。

Google Play ゲーム サービスの利用規約を理解し、遵守するようにしてください。

7.2 必須 ゲームギフト リクエストの承認を実装する。

ゲームでプレーヤーによるゲームギフト リクエストの送信を許可しても、プレーヤーによるゲームギフト リクエストの承認を許可していない場合、サービスの悪用と見なされ、Google Play ゲーム サービスへのアクセスがブロックされる可能性があります。

7.3 推奨 ゲームギフト リクエストを承認するリスナーを実装する。

ゲーム中にリクエストを受け取ったときにプレーヤーに通知されるよう、リクエスト リスナーを実装する必要があります。

8. 割り当てとレート制限

ゲームの割り当てとレート制限を管理するには、次のチェックリスト タスクをご利用ください。ゲームの割り当ての管理と、レート制限の超過を検出する方法について詳しくは、割り当ての管理とレート制限をご覧ください。

ID 重要度 説明
8.1 推奨 クライアント ライブラリを使用する。

モバイル クライアント ライブラリでは、サービスの呼び出しを減らすためにいくつかの戦略が採用されています。たとえば、実績とリーダーボードのデータはキャッシュされているため、プレーヤーはサービスへの呼び出しを何度も実行することなく、自分の実績を好きなだけ表示できます。

プレーヤーのスコアが最後に送信したスコアよりも低い場合、Android クライアント ライブラリはプレーヤーのスコアをサーバーに送信しません。また、Android ライブラリでは、レート制限を検出すると増分実績の頻繁な呼び出しを自動的にまとめて処理します。

8.2 任意 高信頼性メッセージの送信を制限する。

RealTimeMultiplayerClient.sendReliableMessage() を使用して Android アプリで高信頼性メッセージングの呼び出しを行う場合、メッセージ送信頻度が 1 秒あたり 50 件を超えないようにします。

ヒント: これを超える頻度でデータを送信する必要がある場合は、低信頼性メッセージングを使用することをおすすめします。低信頼性メッセージングの割り当ては制限されていません。

8.3 任意 増分実績の頻繁な呼び出しをまとめて処理する。

作成する対戦型ゲームに「パンチを 5000 回繰り出す」という実績がある場合に、ユーザーがパンチを繰り出すたびに増分実績の呼び出しを送信しないようにします。ラウンドの終了後に increment(xxx) という呼び出しを 1 回送信します(xxx はそのラウンドでユーザーが出したパンチの合計数です)。または、パンチを 50 回繰り出したら increment(50) という呼び出しを 1 回送信するようにします。

8.4 任意 使用量を常に意識する。

Google Play ゲーム サービスの呼び出し回数を意識してください。レート制限への到達を回避しても、呼び出し頻度が高ければネットワーク トラフィックが増大し、デバイスのバッテリー消耗が早くなる原因となります。このような問題を避けるには、次のような方法があります。

  • クラウド保存を行うときは、ボタンをクリックするたびに保存するのではなく、数分おきに保存する。
  • プレーヤーがゲームオーバーになるまで待ってからハイスコアを送信する。
  • Google API コンソールのプロジェクト ダッシュボードにアクセスして、アプリの 1 日あたりの割り当てを確認する。

9. イベントとクエスト

ゲームでイベントとクエスト機能を使用している場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
9.1 必須 クエストを見つけやすくする。

ゲームのメインメニューやメインのゲームプレイ ビューから、プレーヤーがクエストを簡単に見つけられることを確認します。

9.2 必須 Play ゲーム アプリからプレーヤーがクエストに参加できるように許可する。

プレーヤーが Play ゲーム アプリでタイルをクリックしてクエストに参加できるよう、ビューを表示する必要があります。

9.3 必須 クエストの参加と完了を確認する。

ゲームでプレーヤーがクエストに参加したり、クエストを完了したりしたときは、明示的に確認する必要があります。トーストやそれに準じる形式で表示します。

9.4 必須 報酬の受け取りを実装する。

クエストの説明で報酬について触れた場合、クエストの完了時に報酬を贈る必要があります。

クエストの完了時にプレーヤーが報酬を受け取ることができるようにするには、次のいずれかの方法を使用します。

  • プレーヤーがデフォルトのクエストリスト UI から完了したクエストの [報酬を受け取る] ボタンをクリックしたときにトリガーされる、報酬を受け取るためのリスナーを実装します。
  • クエストの完了時に報酬を自動的に受け取れるようにします。
9.5 必須 クエストのブランドの取り扱いガイドラインに準拠する。

クエストにリンクする際は、公式クエスト アイコン画像をゲームに表示する必要があります。Google Play ゲーム サービスのブランドの取り扱いガイドラインに準拠していれば、シルエットを大きく歪めないバリエーションも許容されます。

9.6 推奨 報酬について正しく説明する。

報酬については、Play ゲーム アプリの簡易クエストビューに表示できるよう説明の最初に 150 文字以内で説明する必要があります。

9.7 推奨 クエストの進行状況をわかりやすく表示する。

プレーヤーがクエスト完了までの進行状況を簡単に確認できるようにします。プレーヤーのクエストの進行状況(アクティブなクエストが 1 つしかない場合)、または完了間近のクエスト(アクティブなクエストが複数ある場合)をゲームに表示してください。

この視覚情報は、ゲーム内の次の場所に表示できます。

  • ゲーム起動時のポップアップ ダイアログ
  • メインメニュー
  • メインのゲームプレイ画面
9.8 推奨 クエストを完了するまでの残り時間を表示する。

時間制限を設けたり、終了間近のクエスト期限を表示したりすることによって、プレーヤーは終了前にクエストの目標を達成しようと積極的にプレイしようとします。

クエストの終了時間が近づいたら、トーストやその他のゲーム内警告で終了時間までのカウントダウンを表示します。

9.9 推奨 クエストを再利用可能または繰り返し可能にする。

クエストを再利用すると、新しいバイナリを起動することなく新規プレーヤーにクエストを体験する機会を提供できます。人気ゲームの多くには、特定の曜日に毎週繰り返されるクエストがあります。

毎週または毎月クエストを繰り返すと、すべてのプレーヤーが同様のユーザー エクスペリエンスを得られます。

10. 保存済みゲーム

ゲームに保存済みゲーム機能を実装する場合は、次のチェックリスト タスクをご利用ください。

ID 重要度 説明
10.1 必須 保存済みゲームの追加情報を提供するメタデータを追加する。

ゲームを保存する際は、最低でも次のメタデータを含めます。

  • カバー画像 - ゲームの進行状況を記録し、ゲームを中断した場所がわかるスクリーンショット。
  • 説明 - カバー画像の情報を追加する簡単な説明。
  • タイムスタンプ - プレーヤーが保存済みゲームをプレイした時間の長さ。
10.2 必須 プレーヤーに保存済みゲームの読み込みを許可する。

プレーヤーが Play ゲーム アプリ、またはデフォルトの保存済みゲームの選択 UI のいずれかから選択したときに、正しい保存済みゲームを読み込みます。