GamePix games: setup and operation
Reference for the files delivered in Main_File. Documentation updated 22 September 2026. Examples use fictional IDs and balances; replace them with values from your installation.
GamePix games in voice rooms
AppChat includes an online GamePix HTML5 game catalogue, opened from the floating games button inside a voice room. The user chooses a category, browses game cards, and opens a selected game in an embedded WebView. The catalogue requests up to 24 entries per page, ordered by provider quality, with pagination, refresh and retry controls. Available titles and their metadata come from GamePix and can change; a fixed game count is not included or guaranteed.
The purchase includes AppChat's integration source. GamePix hosts the games; their game source files are not bundled and AppChat does not transfer ownership of third-party game artwork or code. Internet access is required. GamePix is separate from AppChat's gifts, coins, diamonds and purchases: this integration has no app-wallet debit, cash-out, wagering, score-to-coin reward or JavaScript wallet bridge. It does not synchronize multiplayer matches or scores between room users.
1. Configure your publisher account and SID
- Open GamePix for Publishers, follow the registration link to the GamePix Dashboard, and create your publisher account. Complete the requested account details, then obtain your publisher SID from GamePix for use in your app. Contact GamePix support if you need help finding it or confirming mobile app use.
- In
Main_File/flutter_app/lib/features/rooms/game_pix/controllers/game_pix_controller.dart, replace theGamePixController.sidconstant (currentlyUOU4Y) with your publisher SID:
static const String sid = 'YOUR_GAMEPIX_SID';
- The feed URL is built as
https://feeds.gamepix.com/v2/jsonwith sid, category, pagination=24, page and order=quality. The SID is a client-side publisher identifier, not a private API secret. No GAMEPIX_SID environment variable or admin SID field is wired in this package; changing the constant requires rebuilding Flutter. - Launch URLs come from the feed. The app preserves provider URL parameters and adds the selected app language
using
lang. Do not replace returned game URLs with unrelated hosts or inject app authentication tokens into them. - Ensure the mobile device can reach the PHP API, feeds.gamepix.com, GamePix game hosts and required provider resources over HTTPS. App configuration is fetched from your authenticated PHP API before the catalogue is loaded directly from GamePix.
Any applicable third-party fees and the buyer's account obligations are covered in third-party services and costs. Provider advertising, revenue share, title availability and language support follow the provider's arrangement; the AppChat purchase does not promise ad-free play or revenue.
2. Configure categories and blocked games
Edit Main_File/backend/php_api/app/Controllers/GameAppController.php, method
gamePixConfig. Its $gamePixConfig array defines category keys and display labels;
$blocked_game_ids defines GamePix feed IDs hidden by the mobile catalogue. These settings are
currently source configuration, not a dedicated admin dashboard editor or app_settings database record.
// Example replacement inside gamePixConfig; retain the existing return statement.
$gamePixConfig = [
['key' => '', 'label' => 'All'],
['key' => 'arcade', 'label' => 'Arcade'],
['key' => 'puzzle', 'label' => 'Puzzle'],
];
$blocked_game_ids = ['REPLACE_WITH_EXACT_FEED_ITEM_ID'];
Leave the blocked list empty if no exclusions are required. Use each provider record's exact id,
not its title, namespace or a numeric ID from AppChat's games table. Category keys must be supported by the
feed; labels are display text you may edit. The supplied categories are All, Hidden Object, Match 3, 2048,
Battle, Simulation, Memory, Arcade, Kids, Drawing, Ball, Stickman, Sports, Fighting, Adventure, Puzzle, Shooter
and Educational.
Deploy the PHP edit and close/reopen the game catalogue to reload configuration. Pull-to-refresh reloads the selected feed, not the PHP configuration. Existing opened games are not remotely revoked by adding an ID to the list. The blocked list is client-side filtering, not a provider access restriction. Category choices organize browsing; keeping All still exposes the provider's general catalogue. A category label such as Kids does not certify the suitability of its games or advertising.
Configuration API
POST https://api.example.com/api/game/gamePixConfig
Content-Type: application/json
API-KEY: YOUR_API_KEY
Auth-Token: A_VALID_APP_USER_TOKEN
{}
The response has the standard API envelope. This abbreviated example shows two categories, not the complete default list:
{
"code": 200,
"data": {
"gamePixConfig": [
{"key": "", "label": "All"},
{"key": "arcade", "label": "Arcade"}
],
"blocked_game_ids": []
}
}
An invalid API key or session produces the API authentication error envelope. If configuration is
missing/malformed or the request fails, the app shows a retry state rather than assuming no blocked games. This
GamePix endpoint is documented separately from the 110 non-game API entries.
The legacy game/list database catalogue is not the GamePix feed and is not used to populate the
current room games button.
3. Game screen behavior and limits
- Initial and subsequent top-level navigation accepts HTTPS GamePix hosts without embedded credentials or nonstandard ports. Foreign and custom-scheme navigation is blocked. Games may load provider-controlled subresources; this check is not an audit of every third-party script or advertisement.
- The game page shows loading and a retry action for detected main-page failures or a 30-second load timeout. A provider's own loader may fail even after the outer page loads successfully.
- Back first traverses available WebView history, then closes the game; the close control exits directly. Repeated opens are guarded. Leaving or changing the room closes the owned game/catalogue overlays.
- Supported portrait/landscape metadata controls game orientation and the app restores its orientation policy on close. Verify device behavior on supported Android/iOS versions.
- The room stays mounted and this integration does not call Agora mute/join/leave. Game audio, native audio focus and voice mixing depend on the device/game and require testing. The page does not grant WebView microphone/camera access through a custom permission handler.
- App-owned controls follow app localization and RTL layout. Supplied category labels are English; game titles and translations are provider metadata. Passing lang does not guarantee every title supports that language. See GamePix's language-query documentation.
- No AppChat cloud game-save, cross-device progress, match restoration or guaranteed offline play is implemented. Provider persistence varies by game.
4. Test GamePix before distribution
- Install the buyer build with your Firebase/backend configuration and publisher SID. Sign in, join a room, open the game button and confirm categories, cards and images load.
- Switch categories, refresh and load later pages. Test an empty/fully filtered page. Temporarily block a real feed ID on staging, reopen the catalogue and verify that title is absent.
- Play representative portrait and landscape games on Android and iOS. Check Arabic/English selection, small screens, game controls, ad behavior and loading/retry after network interruption.
- Test toolbar/hardware back, close/reopen, repeated taps, foreground/background, room departure and room switching. Verify no orphan game overlay remains.
- Use two devices to check room voice while a game is open and after it closes. Confirm no app coins/diamonds change as a consequence of GamePix play.
- Review provider content/ads and your app's privacy disclosures and store submission information for your actual enabled games. Capture actual game catalogue/game screens from your release candidate for reviewer evidence.
These are required buyer release checks, not a claim that every provider game or physical device has been verified. The integration's source tests do not prove gameplay or advertisement behavior on real devices.
5. Troubleshooting and source map
| Symptom | Check |
|---|---|
| Catalogue cannot load configuration | Inspect game/gamePixConfig with a valid API key/session. Both data.gamePixConfig and data.blocked_game_ids must be arrays. Renew login if the token expired. |
| Feed empty or unavailable | Check device connectivity, publisher SID, provider availability and category key. Inspect exact blocked IDs and pagination. An API success does not prove device access to the provider. |
| Card works but game fails | Check the returned HTTPS game URL, host and network. Retry after reconnecting. Report a provider loader/ad failure with the game ID and platform; avoid bypassing URL checks indiscriminately. |
| PHP edits are not visible | Close/reopen the catalogue; ensure you edited the deployed API used by this build. Reload PHP-FPM if the host's OPcache deployment policy requires it. |
| SID change is not visible | Rebuild/reinstall flutter_app. It is a compiled Dart constant, not a live backend value. |
Flutter source directory: flutter_app/lib/features/rooms/game_pix/. Controller:
controllers/game_pix_controller.dart; feed/URL models: models/game_pix_models.dart;
room catalogue: pages/game_bottom_sheet2.dart; embedded player:
pages/game_pix_game_page.dart. Backend configuration:
backend/php_api/app/Controllers/GameAppController.php. The buyer package uses the hosted WebView
dependency described in WebView maintenance; the historical custom wallet
bridge is not required for GamePix.