Following the deprecation of the
[Google Sign-In](https://android-developers.googleblog.com/2024/09/streamlining-android-authentication-credential-manager-replaces-legacy-apis.html)
API, we are removing the games v1 SDK in 2026. After February 2025, you will be unable to publish
titles that are newly integrated with games v1 SDK, on Google Play. We recommend that you use the
games v2 SDK instead.  

While existing titles with the previous games v1 integrations continue to function for a
couple of years, you are encouraged to
[migrate to v2](https://developer.android.com/games/pgs/android/migrate-to-v2)
starting June 2025.  

This guide is for using the Play Games Services v1 SDK. For information
on the latest SDK version, see the
[v2 documentation](https://developer.android.com/games/pgs/quality).

The quality of your game influences the long-term success of your game -- in
terms of installs, player rating and reviews, engagement and player retention.
Before publishing your game, it's important to make sure that your game meets
the basic expectations of game players through compelling features and an
intuitive, well-designed UI.

This document helps you focus on key aspects of quality, feature set, and UI
that can have significant impact on your game's success. Each focus area is
presented with a checklist of minimum requirements, best practices, and
good-to-have enhancements. In the interest of delivering the best possible
product to your players, follow the checklist recommendations to the greatest
extent possible.
| **Caution:** You cannot implement Google Play game services if your game's target audience is children only.
| **Note:** To help prioritize your development efforts, take note of the level of importance indicated for each checklist item.
|
| - **Required**. Minimum requirements that must be implemented for your game to be considered Google Play Games Services-compatible.
| - **Best practices**. Strongly recommended implementation guidelines.
| - **Good-to-have**. Suggested guidelines to help you create a distinctive player experience.

## 1. Sign-in

The following checklist tasks apply to implementing player sign-in functionality
in your game. Learn more about how sign-in works and how you should implement it
in [Sign-in concepts](https://developer.android.com/games/pgs/v1/signin). For code examples of how to implement sign-in on mobile games,
see [Implementing Sign-in on Android](https://developer.android.com/games/pgs/v1/android/signin).

| ID | Importance | Description |
|---|---|---|
| 1.1 | Required | **Sign players in with Google Play Games Services.** 1.1.1. Automatically sign players in when your game launches; use manual sign-in as a backup :   Games should implement [silent sign-in](https://developer.android.com/games/pgs/v1/android/signin#silent-signin) to help players get quickly authenticated and authorized to use the full set of features provided by the Google Play Games Services. If silent sign-in fails, your app should prompt players to [sign in interactively](https://developer.android.com/games/pgs/v1/android/signin#interactive-signin). By using interactive sign-in, players can choose to sign into the game and Play Games ensures their profile is correctly configured for use in your game. Combining silent and interactive sign-in results in the highest sign-in rates with minimal user friction. If the player chooses not to sign in, remember this and do not prompt the player again. Instead, provide a [sign-in button](https://developer.android.com/games/pgs/v1/android/signin#signin-button). The sign-in button should be easy for players to find; for example, it should be accessible from your main screen or located in the Settings screen. This button should not be buried multiple levels deep in your game menu. Continue to try to automatically sign players in every time they start your game - they may change their preferences and automatically sign in. | **Note:** Signing in with Google Play Games is different than Sign-in With Google. They should not be used at the same time. |
| 1.2 | Required | **Do not request non-Play Games scopes when creating your sign-in client.** This will allow players to automatically sign into your game, as requesting non-Play Games scopes will force users to use interactive sign-in. If you are already requesting non-Play Games scopes, remove any unneeded scopes from your [`GoogleSignInOptions`](https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInOptions) construction along with any APIs you no longer use. If you need to request other scopes (for example, if you want to see a user's email for marketing purposes), do so at a relevant time and not as part of the sign-in process. ```scilab // This is the proper way to do it GoogleSignInOptions signInOption = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN; ``` | **Note:** Ensure you do not request the Drive API, even if you use Play Games Services Saved Games. This is already taken care of. |
| 1.3 | Required | **Allow players to stay signed-in.** After the player signs in successfully to your game, connect them automatically whenever your game starts, until the player explicitly signs out. |
| 1.4 | Required | **Display the 'Connecting' pop-up appropriately during sign-in.** On Android devices, the Google Play Games 'Connecting' pop-up must be displayed whenever the sign-in flow is invoked. This requires you to call the [`setViewForPopups()`](https://developers.google.com/android/reference/com/google/android/gms/games/GamesClient#setViewForPopups(android.view.View)) method of the `GamesClient` class. Verify that this pop-up is shown when signing the player in automatically at the start of your game. This lets players know that they are signing into your game correctly. The following example shows how the 'Connecting' pop-up might appear in an Android game during sign-in followed by a brief animation of the Google Play Games Services logo. ![Screeshot shows the 'Connecting to' pop-up.](https://developer.android.com/static/images/games/pgs/signin-popup.png) |
| 1.5 | Required | **Provide players with a sign-out option.** After signing in, the player must always have the option to sign out. Consider providing a sign-out button in a relevant game screen in your app (for example, in your player Settings screen). |
| 1.6 | Best practice | **Remember if players declined signing-in.** If the player declines to sign in when your game initially starts the sign-in flow (for example, if they clicked *Cancel* in the sign-in UI), you should still allow the player to proceed with gameplay. When the player launches your game again, don't invoke the interactive sign-in flow automatically. These players can choose to sign in later using the Sign-in button that should be in your Settings system. This saves players from having to repeatedly decline signing in whenever they start your game. One exception is if players are trying to access a gameplay feature that is dependent on being signed-in (for example, submitting a score to a leaderboard). In this case, prompt them to sign in before continuing with gameplay. |
| 1.7 | Best practice | **Maximize the number of players signed in.** Having more players sign in to Google Play Games Services benefits your players by increasing the opportunities for collaborative and competitive gameplay. To maximize the number of players who are signed-in to Google Play Games Services, you are strongly encouraged to automatically prompt players to sign in, as described above. Otherwise, direct players into the sign-in flow as early as possible from one of these points (most recommended first): - Immediately after your game starts. - Immediately after an introductory experience, such as a cut-scene or tutorial. - When the player clicks on a Google sign-in button anywhere in your game. |
| 1.8 | Good-to-have | **Follow Google branding guidelines.** To provide players with an end-to-end experience that is attractive and consistent, implement the [Google Play Games Services branding guidelines](https://developer.android.com/games/pgs/branding). |
| 1.9 | Good-to-have | **Remind players that they are signed-in.** Give signed-in players an appropriate reminder or cue when your game performs some action on their behalf. For example, when a signed-in player finishes a level, you can provide a message like this to indicate that the player's score and achievements are being automatically uploaded: *"You are signed-in with Google. Your achievements and scores will be saved automatically."* |
| 1.10 | Required | **Back up player progress using the Play Games Services ID.** To ensure players do not lose their progress when switching or resetting devices, or if they play on multiple devices, ensure their progress is backed up to a Cloud Save solution, and use the Play Games Services ID as a key, [securely](https://developer.android.com/games/pgs/v1/signin#secure-access) if using your own backend game server. When players sign in with their Play Games Services ID, check whether progress exists for that account and if it does, allow the player to pick up where they left off. You can use your own cloud save solution or Play Games Services Saved Games. If the user is not signed in, try to maintain the player's progress locally, then sync that progress when the player eventually signs in. This helps to prevent losing any of the player's progress if the player postpones signing in to your game. |

## 2. Achievements

The following checklist tasks apply to implementing the
[Achievements](https://developer.android.com/games/pgs/achievements) feature in your game.

| ID | Importance | Description |
|---|---|---|
| 2.1 | Required | **Ensure that all achievements are attainable.** Players must be able to unlock all achievements you create. |
| 2.2 | Best practice | **Make achievements distinct.** All images, text, and descriptions should be unique across achievements. |
| 2.3 | Best practice | **Score achievements proportionately.** Achievement points should be proportional to the amount of time or skill required to earn that achievement. |
| 2.4 | Best practice | **Design achievements for a variety of difficulty levels.** Include some easy achievements that a player could earn through casual gameplay, a number of intermediate difficulty achievements that require more skill or player dedication to earn, and one or two very difficult achievements for the most dedicated players. For example, the following screenshot shows a hard-to-earn achievement that helps to motivate and retain fans of the title. ![hard to earn achievement that requires earning 5K gems](https://developer.android.com/static/images/games/pgs/achievement-difficulty-example.png) |
| 2.5 | Good-to-have | **Don't frontload achievements.** Avoid awarding more than one achievement in the first 5 minutes of gameplay, since players who are new to your game won't be deeply invested enough to care. Don't define your achievements such that they are unintentionally granted too early in gameplay. For example, watch out for achievements that are likely to be trivially earned at the start of the game, like *"Complete a level without taking damage"*. |
| 2.6 | Good-to-have | **Define achievements around compelling in-game activities.** Select metrics to build achievements that make your game more compelling and replayable (for example, *"number of zombies killed"* is a more interesting metric than *"number of miles your character walked"*). |
| 2.7 | Good-to-have | **Use color achievement icons.** Google Play Games Services uses grayscale versions of achievement icons to show if they're earned or unearned. If you are restricted to using all black (or all white) achievement icons, display them on a colored background. |
| 2.8 | Good-to-have | **Minimize the use of hidden achievements.** Hidden achievements should only be used to avoid in-game spoilers; they should not be the norm. |
| 2.9 | Good-to-have | **Avoid achievements that are too reliant on chance.** *"Find 100 treasure chests"* is a better achievement than *"Find an item that has a 1% chance of appearing in a treasure chest."* |
| 2.10 | Good-to-have | **Think like an 'Achievement Hunter'.** Some players will attempt to earn every achievement you create. Try to provide achievements that cater to this category of players. Avoid creating achievements that rely too much on elements beyond the player's control or cannot be earned once the player has made a decision in the game. |
| 2.11 | Good-to-have | **Ensure your achievement icon appears correctly.** When an achievement icon is displayed in an Android [toast](https://developer.android.com/guide/topics/ui/notifiers/toasts), the icon is overlaid with a circle and its outer corners are hidden. Make sure that your icon still looks good under these circumstances. |

## 3. Leaderboards

The following checklist tasks apply to implementing the [Leaderboards](https://developer.android.com/games/pgs/leaderboards) feature in your game.

| ID | Importance | Description |
|---|---|---|
| 3.1 | Best practice | **Make leaderboards visible in your main menu and after key transitions.** Leaderboards should be readily accessible on the loading of a game. After critical transitions in a game (for example, at the end of a level, or when the player dies), players should immediately see links to the relevant leaderboards. |
| 3.2 | Best practice | **Define upper limits for scores that can be submitted.** If possible, add limits when defining your leaderboards so that obviously fake scores are discarded. |
| 3.3 | Best practice | **Use custom icons.** Create a custom icon for each leaderboard you define; don't just use your game's icon, as it will display poorly in the Google Play Games app. |
| 3.4 | Best practice | **Keep the frequency of score submissions appropriate.** Submit scores after critical transitions in the game, such as at the end of a level or when a player's game character dies. For games without critical transitions (for example, an "endless runner" type game), use good judgment on how frequently to submit scores. Scores should not be submitted continuously or every second. |
| 3.5 | Good-to-have | **Make use of scoretags.** Scoretags are extra bits of data that can be sent with your score submission. For instance, you can implement a scoretag as a flag to confirm that a player's submitted score is valid. Custom leaderboards can also read this tag data. If the scoretag consisted of an ID for a YouTube video containing that player's gameplay, for instance, your game could create a link to view that video within your leaderboard. |
| 3.6 | Good-to-have | **Creatively design your own leaderboard UI** If you have the resources, build your own custom leaderboard view on top of the social leaderboard data. Social leaderboards typically create a more engaging experience than public leaderboards. Check first to determine if there are any entries in the social leaderboard. If not, use the public leaderboard instead. |
| 3.7 | Good-to-have | **Show players how they stack up against the competition.** The leaderboards API supports showing score windows (for example, a player's rank within +/-10 spots). If you are creating a custom view, this can be a powerful way to motivate engagement. This could be shown right after a critical transition in the game (for example, at the end of a level or when a player's game character dies). Avoid putting unnecessary clicks between your players and their ranking information. |

## 4. Friends

The following checklist tasks apply to implementing the
[Friends APIs](https://developer.android.com/games/pgs/friends) in your game.

| ID | Importance | Description |
|---|---|---|
| 4.1 | Required | **When players are displayed in a list, show the Play Games icon next to users who have a Play Games profile.** This list could be an existing friends list, a recently-played friends list, or other list of friends. 4.1.1. The Play Games icon must be clickable. : If the user presses the icon, the game should call [`getCompareProfileIntent()`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayersClient.html#getCompareProfileIntent(com.google.android.gms.games.Player)) or [`getCompareProfileIntentWithAlternativeNameHints()`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayersClient#public-abstract-taskintent-getcompareprofileintentwithalternativenamehints-string-otherplayerid,-string-otherplayeringamename,-string-currentplayeringamename) to show the UI where the user can compare themselves against another player's profile. 4.1.2. Player profiles and friend invitations support, for customizable in-game player names. :   If a player sets a different name within the game (and doesn't use their Play Games profile name), use [`getCompareProfileIntentWithAlternativeNameHints()`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayersClient#public-abstract-taskintent-getcompareprofileintentwithalternativenamehints-string-otherplayerid,-string-otherplayeringamename,-string-currentplayeringamename) to provide that alternative in-game name for both the current player and the player they're viewing, as context for the profile view and any friend invitation sent from it. Pass only persistent, global player names for the values and not arbitrary user content. This requirement means that friend invitations sent from within the game will provide context to both players: - The recipient will see the in-game name of the invitation sender, along with the game name. - When viewing the friendship, the sender will still see the in-game name of the recipient, as well as the game they initiated it from. |
| 4.2 | Best practice | Use different icons to show which Play Games users are already friends, and which are not yet Play Games friends but have signed in with Play Games. Use two icons for Play Games users, one for "Friends" and one for "Not friends" (or when the friendship status is unknown). ![](https://developer.android.com/static/images/games/pgs/signed-in-friend.png) **Friends icon** ![](https://developer.android.com/static/images/games/pgs/not-yet-friends.svg) **Not Friends icon** |
| 4.3 | Best practice | Call [`loadFriends()`](https://developers.google.com/android/reference/com/google/android/gms/games/PlayersClient#loadFriends(int,%20boolean)) every time you sign-in and display the list of friends to ensure the friends list is up-to-date. Make sure players see the updated list. |
| 4.4 | Best practice | If your game already contains in-game friends, use the Friends APIs to increase the list of friends by adding the Play Games friends. If a player is in the in-game friends list and they are also a Play Games friend, show the icon for "Friends". |
| 4.5 | Best practice | If a player has denied the request to access their friends list, don't show the dialog asking for access again unless the user has taken an action to indicate they want to give access (for example, pressing an "Import Play Games Friends" button). |
| 4.6 | Best practice | If a player has denied access to the friends list, give them a way to grant friends list access in the future (for example, after pressing an "Import Play Games Friends" button). |
| 4.7 | Best practice | If you use the player ID or friends list with a backend server, you must access the ID or list [securely](https://developer.android.com/games/pgs/signin#secure-access). In addition, for some older games and players, the player ID returned by the *Android* SDK for a player may not be the same ID that other players see when viewing that player in the same game; this is particularly relevant when using the friends list. However, the `player_id` returned within the REST API is always consistent and is always the ID that is visible to other players. |

## 5. Quota and rate limiting

The following checklist tasks apply to managing the quota and rate limiting in
your game. To learn how to manage your game's quota and detect when its rate
limit is exceeded, see [Managing Quota and Rate Limiting](https://developer.android.com/games/pgs/quota).

| ID | Importance | Description |
|---|---|---|
| 5.1 | Best practice | **Use the client libraries.** The mobile client libraries employ a number of strategies to reduce the calls you make to the service. For instance, data for achievements and leaderboards is cached, so players can view their achievements as often as they like without requiring the service to make multiple calls. The Android client library will not to send a player's score to the server if your score isn't as good as one you recently submitted. The Android library also automatically combines frequent achievement increment calls when it detects that you are being rate limited. |
| 5.2 | Good-to-have | **Combine frequent calls to incremental achievements.** If you're making a fighting game and you have a 'Throw 5000 punches' achievement, don't send an achievement increment call every time somebody throws a punch. Wait until the end of the round, and then send one `increment(xxx)` call (where xxx is the total number of punches thrown that round), or wait until 50 punches are thrown before sending a single `increment(50)` call. |
| 5.3 | Good-to-have | **Be aware of your usage.** Be conscious of the number of calls you make to Google Play Games Services. Even if you avoid hitting rate limits, frequent calls can lead to high network traffic, and cause the device's battery to drain more rapidly. To avoid this, you can use these techniques: - When performing saved games, keep the frequency to once every few minutes, not on every button click. - Wait until the player's game is over before submitting a high score. - Review your app's daily quota by going to your project dashboard in the Google Cloud Platform. |

## 6. Saved games

The following checklist tasks apply to implementing the
[Saved Games](https://developer.android.com/games/pgs/savedgames) feature in your game.

| ID | Importance | Description |
|---|---|---|
| 6.1 | Required | **Add metadata to provide additional context for saved games.** At minimum, you must include the following metadata when committing a saved game: - Cover image - A screenshot that captures game progress and reminds players of where they left the game. - Description - Short description that provides additional context for the cover image. - Time stamp - Indicates how long the player has been playing this saved game. |
| 6.2 | Required | **Allow players to load saved games.** Load the correct saved game when players make a selection from either the [Play Games app](https://play.google.com/store/apps/details?id=com.google.android.play.games) or the default Saved Games selection UI. |