Skip to main content

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 NameDescriptionCallback Parameters
menu:showGame menu shown successfully{ res: string, size?: { width?: string, height?: string } }
menu:hideGame menu hiddenNone
menu:errorGame menu errorError
payment:successPayment successful{ order_no: string, openid: string, order_no_hash: string }
payment:failedPayment failedError
payment:hidePayment page hiddenNone
payment:queryChannelsFailedQuery channels failedError
login:successLogin successfulLoginResult
login:failedLogin failedError
login:statusChangedLogin status changed'logged_in' | 'logged_out' | 'token_expired'
login:tokenExpiredToken expiredNone
products:successProducts data loaded successfullyProductsResult
products:failedFailed to load products dataError
sdk:loadedSDK loaded successfullystring[] (List of loaded modules)
sdk:errorSDK errorError

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);
}
}