Common issues and solutions for Game Services integration
General Questions
Do I need to manually configure AndroidManifest.xml or Info.plist?
No. Essential Kit automatically injects required permissions and platform entries during build. You only need to configure settings in Essential Kit Settings inspector.
Can I test Game Services without publishing my app?
Yes. Both platforms support testing before release:
iOS: Use Sandbox environment with test Apple IDs
Android: Add test accounts in Play Console under Play Games Services β Testers
What are the minimum settings required for Game Services to work?
iOS:
Game Center enabled in App Store Connect
Leaderboards and achievements configured in App Store Connect
Leaderboard/achievement definitions added in Essential Kit Settings
Android:
Play Services Application ID set in Essential Kit Settings
Leaderboards and achievements configured in Play Console
Leaderboard/achievement definitions added in Essential Kit Settings
How do platform-specific IDs work?
Each leaderboard/achievement has:
Common ID: Used in your code (e.g., "high_score")
iOS Platform ID: Game Center ID from App Store Connect
Android Platform ID: Play Games ID from Play Console
Essential Kit automatically uses the correct platform ID based on the build target.
Authentication Issues
Authentication doesn't work in my game, what should I check?
Verify Game Services is enabled in Essential Kit Settings
Register for OnAuthStatusChange event before calling Authenticate()
Call GameServices.Authenticate() (silent first, then interactive if needed)
Check error callback for specific error details
Verify platform configuration (see platform-specific sections below)
Player cancelled authentication, how do I let them sign in again?
Call GameServices.Authenticate(interactive: true) when player clicks a "Sign In" button. The interactive: true parameter shows the platform login UI.
Can I check if player is authenticated without showing login UI?
Yes, use GameServices.IsAuthenticated property or check GameServices.LocalPlayer.IsAuthenticated. For silent authentication attempt, call GameServices.Authenticate(interactive: false).
How do I handle authentication in production?
Use this pattern:
On app start, call GameServices.Authenticate(interactive: false) for silent sign-in
If silent auth fails, show a "Sign In" button
When user clicks button, call GameServices.Authenticate(interactive: true) to show login UI
Leaderboard Issues
My score submission returns InvalidParameter error, what's wrong?
Check these common causes:
Leaderboard ID in code doesn't match ID in Essential Kit Settings
Leaderboard definition missing iOS or Android platform ID
Platform ID in settings doesn't match dashboard configuration (App Store Connect / Play Console)
Scores don't appear in the leaderboard, but submission succeeds
Scores may be cached offline and upload later. Check:
Device has internet connection
Score appears in native Game Center / Play Games app
Wait a few minutes for server processing
Platform may keep highest score, not latest (check leaderboard configuration)
How do I display weekly or daily leaderboards?
Use LeaderboardTimeScope when showing or loading leaderboards:
Can I create custom leaderboard UI instead of native UI?
Yes. Use ILeaderboard.LoadTopScores() or LoadPlayerCenteredScores() to get score data, then display in your own UI. Native UI is optional.
Achievement Issues
Achievement progress doesn't update, what should I check?
Verify player is authenticated before reporting progress
Check achievement ID in code matches Essential Kit Settings
Verify platform ID in settings matches dashboard (App Store Connect / Play Console)
Confirm percentage is between 0.0 and 100.0
Check error callback for specific failure reason
How do incremental achievements work?
Set the percentage based on progress:
Platform tracks progress and unlocks when you report 100%.
Achievement unlocked but banner doesn't show on iOS
Check "Show Achievement Completion Banner" is enabled in Game Services settings. This is iOS-only and must be enabled for automatic banners.
Can I query player's current achievement progress?
Yes, use GameServices.LoadAchievements() to get all achievements with current progress:
iOS (Game Center) Specific
Why doesn't the sign-in dialog appear a second time after user cancelled it?
This is a Game Center limitation. After cancelling, the player must manually sign in through iOS Settings β Game Center. Your app cannot show the dialog again until they sign in via Settings.
Solution: Show an in-app message directing users to Settings when authentication fails after cancellation.
Game Center sandbox doesn't work, what should I check?
Sign out of production Game Center in iOS Settings
Sign in with a Sandbox test Apple ID
Ensure device is connected to internet
Test Apple ID must be created in App Store Connect β Users and Access β Sandbox Testers
Leaderboards and achievements don't appear in Game Center app
Verify leaderboards/achievements are approved in App Store Connect
Check they're in "Ready to Submit" or "Live" state
For sandbox testing, they should at least be in "Waiting for Review" state
How do I create leaderboard groups on iOS?
In App Store Connect, go to Game Center β Leaderboard Groups
Create a group with ID starting with "grp." (e.g., "grp.com.yourcompany.game.scores")
Add individual leaderboards to the group
Use group ID in Essential Kit Settings
If you plan to deploy to multiple Apple platforms (macOS, tvOS), use leaderboard/achievement groups from the start. Changing from individual to group IDs later requires all players to reset progress.
Android (Play Games) Specific
What are SHA fingerprints and why do I need them?
SHA fingerprints authenticate your app with Play Games. Each keystore (debug, release, Play Store signing) has a unique SHA-1 fingerprint that must be added to Play Console credentials.
What are different SHA fingerprints for different build types?
When Development Build is enabled in Unity Build Settings, Android uses the default debug keystore.
Verify you added the SHA-1 for the keystore you're using (debug/release/Play signing)
Wrong Play Services Application ID: ID in Essential Kit Settings doesn't match Play Console
Check Play Console β Play Games Services β Setup and Management β Configuration
Copy the Project ID exactly into Essential Kit Settings
Test account not added: For unpublished apps, test account must be added as tester
Play Console β Your App β Play Games Services β Setup and Management β Testers
Add your Google account email to the testers list
99% of Android sign-in failures are caused by incorrect SHA fingerprint in Play Console credentials. Always verify you added the correct fingerprint for your current keystore.
Even with correct SHA fingerprints, test accounts must be added to the testers list in Play Console for unpublished apps.
How do I get SHA fingerprint from an APK file?
I get "keytool command not found" error
keytool is part of the Java SDK. You need Java installed and:
Windows: Set JAVA_HOME environment variable
macOS/Linux: Add Java to PATH
keytool is located in the bin folder of your Java installation.
Server Client ID causes sign-in to fail
Make sure you created the OAuth client for Web Application, NOT Android. Android Play Games integration requires Web OAuth client ID for server access.
To create:
Google Cloud Console β Credentials
Create OAuth Client β Web Application (not Android)
Copy Web client ID to Essential Kit Settings β Android Properties β Server Client Id
Server Client ID is only needed if you access Play Games profile data from your backend. For basic Game Services (leaderboards/achievements only), leave it empty.
Error Handling
My operations fail with "NotAuthenticated" error
Player must be authenticated before using leaderboards or achievements. Check:
Call GameServices.Authenticate() before game services operations
Wait for OnAuthStatusChange event with authenticated status
Use GameServices.IsAuthenticated to check state before operations
How do I handle offline scenarios?
Both Game Center and Play Games cache data when offline:
Scores and achievement progress are queued and uploaded when online
Loading operations may fail with network errors
Native UI requires internet connection
Best practice: Check errors and show appropriate offline message to users.
Where can I see full error details?
Check the Error object in callbacks:
Demo Scene & Comparison
How can I verify Essential Kit behavior versus my implementation?
Run the demo scene at Assets/Plugins/VoxelBusters/EssentialKit/Examples/Scenes/GameServicesDemo.unity:
If demo works but your scene doesn't, compare:
Essential Kit Settings configuration
Event registration in OnEnable/OnDisable
Error handling in callbacks
Authentication flow
Check GameServicesDemo.cs for reference implementation
What if the demo scene also fails?
Verify platform configuration (App Store Connect / Play Console)
Check leaderboard/achievement platform IDs match dashboards exactly
// Example: Player won 45 out of 100 games
double percentage = (45.0 / 100.0) * 100.0; // = 45%
GameServices.ReportAchievementProgress("win_100_games", percentage, callback);