| name | integration |
| description | Use this skill when working with Playgama Bridge SDK for HTML5 games. Activates for game development involving cross-platform publishing, advertisements, in-app purchases, leaderboards, or social features using Playgama Bridge. |
Playgama Bridge SDK Integration
Playgama Bridge is a cross-platform SDK for publishing HTML5 games across 20+ platforms including Playgama, YouTube, Yandex Games, Crazy Games, Poki, Facebook, Telegram, Xiaomi, and more.
Installation
Add the SDK script to the HTML <head>:
<script src="https://bridge.playgama.com/v1/stable/playgama-bridge.js"></script>
CDN options:
https://bridge.playgama.com/v1/stable/playgama-bridge.js - Recommended (latest v1.x.x)
https://bridge.playgama.com/latest/playgama-bridge.js - Bleeding edge
https://bridge.playgama.com/v1.27.0/playgama-bridge.js - Specific version
Initialization
bridge.initialize()
.then(() => {
})
.catch(error => {
})
After game is fully loaded and ready for player interaction:
bridge.platform.sendMessage('game_ready')
Device
bridge.device.type
Platform Detection
bridge.platform.id
bridge.platform.language
bridge.platform.tld
bridge.platform.payload
bridge.platform.getServerTime().then(result => console.log(result))
Platform Messages
bridge.platform.sendMessage('in_game_loading_started')
bridge.platform.sendMessage('in_game_loading_stopped')
bridge.platform.sendMessage('gameplay_started')
bridge.platform.sendMessage('gameplay_stopped')
bridge.platform.sendMessage('player_got_achievement')
Player
bridge.player.id
bridge.player.name
bridge.player.photos
bridge.player.extra
Authorization
bridge.player.isAuthorizationSupported
bridge.player.isAuthorized
let options = {}
bridge.player.authorize(options)
.then(() => {
})
.catch(error => {
})
Audio & Pause State
bridge.platform.isAudioEnabled
bridge.platform.on(bridge.EVENT_NAME.AUDIO_STATE_CHANGED, isEnabled => {
})
bridge.platform.on(bridge.EVENT_NAME.PAUSE_STATE_CHANGED, isPaused => {
})
Storage
bridge.storage.get('key')
.then(data => console.log(data))
bridge.storage.get(['key1', 'key2'])
.then(data => console.log(data))
bridge.storage.set('key', 'value')
.then(() => { })
bridge.storage.set(['key1', 'key2'], ['value1', 'value2'])
.then(() => { })
bridge.storage.delete('key')
bridge.storage.delete(['key1', 'key2'])
Banner Ads
bridge.advertisement.isBannerSupported
let position = 'bottom'
let placement = 'menu'
bridge.advertisement.showBanner(position, placement)
bridge.advertisement.hideBanner()
bridge.advertisement.bannerState
bridge.advertisement.on(bridge.EVENT_NAME.BANNER_STATE_CHANGED, state => {
console.log('Banner state:', state)
})
Interstitial Ads
bridge.advertisement.isInterstitialSupported
let placement = 'level_complete'
bridge.advertisement.showInterstitial(placement)
bridge.advertisement.minimumDelayBetweenInterstitial
bridge.advertisement.setMinimumDelayBetweenInterstitial(30)
bridge.advertisement.interstitialState
bridge.advertisement.on(bridge.EVENT_NAME.INTERSTITIAL_STATE_CHANGED, state => {
if (state === 'opened') {
} else if (state === 'closed' || state === 'failed') {
}
})
Rewarded Ads
bridge.advertisement.isRewardedSupported
let placement = 'double_coins'
bridge.advertisement.showRewarded(placement)
bridge.advertisement.rewardedState
bridge.advertisement.on(bridge.EVENT_NAME.REWARDED_STATE_CHANGED, state => {
if (state === 'opened') {
} else if (state === 'rewarded') {
} else if (state === 'closed' || state === 'failed') {
}
})
bridge.advertisement.rewardedPlacement
In-App Purchases
bridge.payments.isSupported
bridge.payments.getCatalog()
.then(items => {
items.forEach(item => {
console.log('ID:', item.id)
console.log('Price:', item.price)
console.log('Currency:', item.priceCurrencyCode)
console.log('Value:', item.priceValue)
})
})
bridge.payments.purchase('product_id')
.then(purchase => console.log('Purchased:', purchase.id))
.catch(error => { })
bridge.payments.consumePurchase('product_id')
.then(purchase => console.log('Consumed:', purchase.id))
bridge.payments.getPurchases()
.then(purchases => {
purchases.forEach(p => console.log('Owned:', p.id))
})
Config example (playgama-bridge-config.json):
{
"payments": [
{
"id": "coins_100",
"playgama": { "amount": 1 },
"playdeck": { "amount": 1, "description": "100 Coins" }
}
]
}
Leaderboards
bridge.leaderboards.type
bridge.leaderboards.setScore('leaderboard_id', 1000)
.then(() => { })
bridge.leaderboards.getEntries('leaderboard_id')
.then(entries => {
entries.forEach(entry => {
console.log('Name:', entry.name)
console.log('Score:', entry.score)
console.log('Rank:', entry.rank)
console.log('Photo:', entry.photo)
})
})
bridge.leaderboards.showNativePopup('leaderboard_id')
Config example:
{
"leaderboards": [
{
"id": "high_score"
}
]
}
Social Features
Share
bridge.social.isShareSupported
let options = {}
switch (bridge.platform.id) {
case 'vk':
options = { link: 'https://...' }
break
case 'facebook':
options = { image: 'base64...', text: 'Check this game!' }
break
}
bridge.social.share(options)
Invite Friends
bridge.social.isInviteFriendsSupported
bridge.social.inviteFriends({ text: 'Join me!' })
Join Community
bridge.social.isJoinCommunitySupported
let options = {}
switch (bridge.platform.id) {
case 'vk':
case 'ok':
options = { groupId: 123456 }
break
}
bridge.social.joinCommunity(options)
Other Social Methods
bridge.social.isAddToFavoritesSupported
bridge.social.addToFavorites()
bridge.social.isRateSupported
bridge.social.rate()
bridge.social.isAddToHomeScreenSupported
bridge.social.addToHomeScreen()
bridge.social.isCreatePostSupported
bridge.social.createPost(options)
bridge.social.isExternalLinksAllowed
Best Practices
- Always call
bridge.platform.sendMessage('game_ready') when game is loaded
- Mute/restore game audio when audio state changed
- Show ads at natural breakpoints (level transitions, player death), not during gameplay
- Check
isSupported before using features
- Handle pause state changes to pause/resume game
- Use platform-specific options for social features
- Grant rewards only when rewarded ad state is 'rewarded'