Event System
Event Listening minigameApi.on(event, callback)
// Game menu events
minigameApi.on('menu:show', (data) => {
console.log('Game menu shown successfully', data);
});
minigameApi.on('menu:hide', () => {
console.log('Game menu hidden');
});
minigameApi.on('menu:error', (error) => {
console.error('Game menu error', error);
});
// Payment events
minigameApi.on('payment:success', (data) => {
console.log('Payment successful', data);
});
minigameApi.on('payment:failed', (error) => {
console.log('Payment failed', error);
});
minigameApi.on('payment:hide', () => {
console.log('Payment page hidden');
});
minigameApi.on('payment:queryChannelsFailed', (error) => {
console.log('Query channels failed', error);
});
// Login events
// data is of type LoginResult: { code: number, message: string, data: { jwtToken: string, expiresIn: number, refreshToken: string } }
// Recommended: console.log('Login successful, jwtToken:', data.data.jwtToken);
minigameApi.on('login:success', (data) => {
console.log('Login successful, jwtToken:', data.jwtToken || data?.data?.jwtToken);
});
minigameApi.on('login:failed', (error) => {
console.log('Login failed', error);
});
minigameApi.on('login:statusChanged', (status) => {
console.log('Login status changed', status);
});
minigameApi.on('login:tokenExpired', () => {
console.log('Token expired');
});
// Products events
minigameApi.on('products:success', (data) => {
console.log('Products data loaded successfully', data);
});
minigameApi.on('products:failed', (error) => {
console.log('Failed to load products data', error);
});
// Common events
minigameApi.on('sdk:loaded', (modules) => {
console.log('SDK loaded successfully', modules);
});
minigameApi.on('sdk:error', (error) => {
console.error('SDK error', error);
});
Event Types
| Event Name | Description | Callback Parameters |
|---|---|---|
menu:show | Game menu shown successfully | { res: string, size?: { width?: string, height?: string } } |
menu:hide | Game menu hidden | None |
menu:error | Game menu error | Error |
payment:success | Payment successful | { order_no: string, openid: string, order_no_hash: string } |
payment:failed | Payment failed | Error |
payment:hide | Payment page hidden | None |
payment:queryChannelsFailed | Query channels failed | Error |
login:success | Login successful | LoginResult |
login:failed | Login failed | Error |
login:statusChanged | Login status changed | 'logged_in' | 'logged_out' | 'token_expired' |
login:tokenExpired | Token expired | None |
products:success | Products data loaded successfully | ProductsResult |
products:failed | Failed to load products data | Error |
sdk:loaded | SDK loaded successfully | string[] (List of loaded modules) |
sdk:error | SDK error | Error |
Remove Event Listener minigameApi.off(event, callback?)
// Remove specific callback
minigameApi.off('payment:success', callback);
// Remove all callbacks
minigameApi.off('payment:success');
Best Practices: Event Management
// Use event delegation pattern
class GameManager {
constructor() {
this.minigameApi = midas.minigame(config);
this.setupEventListeners();
}
setupEventListeners() {
this.minigameApi.on('payment:success', this.handlePaymentSuccess.bind(this));
this.minigameApi.on('menu:show', this.handleMenuShow.bind(this));
}
handlePaymentSuccess(data) {
// Handle payment success
this.updateGameState(data);
}
handleMenuShow(data) {
// Handle menu show
this.trackEvent('menu_show', data);
}
}