添加zgame游戏接入

This commit is contained in:
zhx 2026-06-29 17:34:30 +08:00
parent 99592a6e52
commit 25c5e65f39

View File

@ -1,5 +1,5 @@
(function () {
var remoteBridgeVersion = '20260610.2';
var remoteBridgeVersion = '20260629.1';
function safeCall(fn, args) {
try {
@ -132,6 +132,9 @@
if (values.indexOf('reyou') >= 0 || values.indexOf('hotgame') >= 0) {
return 'reyou_v1';
}
if (values.indexOf('zgame') >= 0) {
return 'zgame_v1';
}
if (values.indexOf('yomi') >= 0) {
return 'yomi_v4';
}
@ -243,6 +246,254 @@
return true;
}
function invokeNamedCallbackText(callbackName, payload) {
var text = readString(callbackName);
if (
!/^[A-Za-z_$][0-9A-Za-z_$]*(\.[A-Za-z_$][0-9A-Za-z_$]*)*$/.test(
text
)
) {
return false;
}
var parts = text.split('.');
var target = window;
for (var i = 0; i < parts.length; i += 1) {
target = target[parts[i]];
if (target === null || target === undefined) {
return false;
}
}
if (typeof target !== 'function') {
return false;
}
safeCall(target, [stringifyParams(payload || {})]);
return true;
}
function firstNonEmpty() {
for (var i = 0; i < arguments.length; i += 1) {
var value = readString(arguments[i]);
if (value) {
return value;
}
}
return '';
}
function readNumber(value, fallback) {
if (typeof value === 'number' && isFinite(value)) {
return value;
}
var text = readString(value);
if (!text) {
return fallback || 0;
}
var parsed = Number(text);
return isFinite(parsed) ? parsed : fallback || 0;
}
function zgameLaunchInfo() {
var config = launchConfig();
var payload = launchPayload();
var entry = launchEntry();
var openId = firstNonEmpty(
config.openId,
config.open_id,
config.userId,
config.user_id,
config.uid,
payload.openId,
payload.open_id,
payload.userId,
payload.user_id,
payload.uid
);
var jsCode = firstNonEmpty(
config.js_code,
config.jsCode,
config.code,
config.session,
config.token,
payload.js_code,
payload.jsCode,
payload.code,
payload.session,
payload.token
);
var userName = firstNonEmpty(
config.userName,
config.user_name,
config.nickname,
config.nickName,
payload.userName,
payload.user_name,
payload.nickname,
payload.nickName
);
var avatar = firstNonEmpty(
config.avatar,
config.avatarUrl,
config.avatar_url,
payload.avatar,
payload.avatarUrl,
payload.avatar_url
);
return {
openId: openId,
jsCode: jsCode,
userName: userName,
avatar: avatar,
balance: readNumber(
firstNonEmpty(
config.balance,
config.coin,
config.cash,
payload.balance,
payload.coin,
payload.cash
),
0
),
gameId: firstNonEmpty(
config.gameId,
config.game_id,
payload.gameId,
payload.game_id
),
roomId: firstNonEmpty(
config.roomId,
config.room_id,
payload.roomId,
payload.room_id
),
callbackBase: firstNonEmpty(
config.callbackBase,
config.callback_base,
payload.callbackBase,
payload.callback_base
),
merchantPayload: firstNonEmpty(
config.merchantPayload,
config.merchant_payload,
payload.merchantPayload,
payload.merchant_payload
),
launchUrl: firstNonEmpty(
entry.entryUrl,
entry.entry_url,
payload.launchUrl,
payload.launch_url
),
};
}
function zgameBridgePayload(resp, code, message) {
return {
error: {
code: readString(code || '0') || '0',
message: readString(message || 'success') || 'success',
},
resp: resp || {},
};
}
function zgameBridgeError(code, message) {
return zgameBridgePayload(
null,
code || '500',
message || 'bridge error'
);
}
function invokeZGameBridge(api, paramsJson, callbackName) {
var apiName = readString(api);
var normalized = apiName.toLowerCase();
var params = parseBridgePayload(paramsJson);
var info = zgameLaunchInfo();
var response;
try {
if (normalized === 'getuserinfo' || normalized === 'get_user_info') {
response = zgameBridgePayload({
openId: info.openId,
userName: info.userName,
nickname: info.userName,
avatar: info.avatar,
balance: info.balance,
gameId: info.gameId,
roomId: info.roomId,
callbackBase: info.callbackBase,
merchantPayload: info.merchantPayload,
});
} else if (normalized === 'login') {
if (!info.openId || !info.jsCode) {
response = zgameBridgeError(
'403',
'missing openId or js_code'
);
} else {
response = zgameBridgePayload({
js_code: info.jsCode,
openId: info.openId,
});
}
} else if (
normalized === 'closewebview' ||
normalized === 'closeweb_view' ||
normalized === 'close' ||
normalized === 'destroy'
) {
callNativeBridge('closeGame', params || {});
response = zgameBridgePayload({});
} else if (normalized === 'recharge' || normalized === 'pay') {
callNativeBridge('gameRecharge', params || {});
response = zgameBridgePayload({});
} else {
callNativeBridge(apiName || 'NativeBridge', params || {});
response = zgameBridgePayload({});
}
} catch (error) {
response = zgameBridgeError(
'500',
String((error && error.message) || error)
);
}
invokeNamedCallbackText(callbackName, response);
return response;
}
function installZGameBridgeAliases(nativeBridge) {
var previousBridge = window.ThirdPlatformBridge || {};
var zgameBridge = {};
Object.keys(previousBridge).forEach(function (key) {
zgameBridge[key] = previousBridge[key];
});
zgameBridge.__hyappZGameBridge = true;
zgameBridge.invoke = function (api, paramsJson, callbackName) {
return invokeZGameBridge(api, paramsJson, callbackName);
};
zgameBridge.getLaunchInfo = function () {
return zgameLaunchInfo();
};
window.ThirdPlatformBridge = zgameBridge;
if (
!window.WebViewJavascriptBridge ||
typeof window.WebViewJavascriptBridge.invoke !== 'function'
) {
window.WebViewJavascriptBridge = zgameBridge;
}
nativeBridge.thirdPlatformInvoke = zgameBridge.invoke;
}
function shouldInstallZGameBridge(adapter) {
if (adapter === 'zgame_v1') {
return true;
}
return (
zgameLaunchInfo().callbackBase.toLowerCase().indexOf('/zgame/') >=
0
);
}
function yomiActionResult(action, payload) {
var normalized = readString(action).toLowerCase();
if (normalized === 'insufficient') {
@ -584,6 +835,9 @@
};
installReyouBridgeAliases(nativeBridge);
installYomiBridgeAliases(nativeBridge);
if (shouldInstallZGameBridge(adapter)) {
installZGameBridgeAliases(nativeBridge);
}
window.NativeBridge = nativeBridge;
[
@ -613,13 +867,20 @@
}
function signalReady(config, payload) {
[
var readyEvents = [
['hyappGameBridgeReady', payload],
['hyappRemoteGameBridgeReady', window.__hyappRemoteGameBridge],
['baishunBridgeReady', config],
['leaderLaunchConfig', payload],
['launchConfig', config],
].forEach(function (item) {
];
if (
window.ThirdPlatformBridge &&
window.ThirdPlatformBridge.__hyappZGameBridge
) {
readyEvents.push(['zgameBridgeReady', window.ThirdPlatformBridge]);
}
readyEvents.forEach(function (item) {
try {
window.dispatchEvent(
new CustomEvent(item[0], { detail: item[1] })