跳转到内容

微信 API 使用说明

整合包内的 Godot 引擎扩展了 5 个微信 API 单例类,可以在 GDScript 中直接调用微信小游戏原生能力。

单例名用途
WeChatSDK通用微信 API 桥接、登录、环境检测
WeChatAuth微信用户授权按钮
WeChatBannerAd横幅广告
WeChatInterstitialAd插屏广告
WeChatRewardedVideoAd激励视频广告

建议在调用微信 API 前先判断是否真的运行在微信小游戏环境中:

func is_wechat_runtime() -> bool:
return ClassDB.class_exists("WeChatSDK") and WeChatSDK.is_available()

不要只用 ClassDB.class_exists("WeChatSDK") 判断运行环境。这个类可能在其它导出目标中也存在,但普通 Web 环境里没有微信的 wx 对象。

WeChatSDK.call_wx() 适用于标准 success/fail 回调模式的微信 API:

if WeChatSDK.is_available():
print("当前运行在微信小游戏环境")
WeChatSDK.login(func(success: bool, result: String):
if success:
var data = JSON.parse_string(result)
var code: String = data.get("code", "")
print("登录成功, code: ", code)
)
WeChatSDK.call_wx("getSystemInfoSync", {}, func(success: bool, result: String):
if success:
var info = JSON.parse_string(result)
print("屏幕尺寸: %sx%s" % [info.get("screenWidth", 0), info.get("screenHeight", 0)])
)

常见用途:

  • login:获取微信登录 code
  • getLaunchOptionsSync:读取启动参数
  • onShow:监听小游戏从后台切回
  • shareAppMessage:分享给好友
  • getSystemInfoSync:读取设备和屏幕信息

微信用户信息按钮需要创建原生按钮对象,并在流程结束后手动销毁:

WeChatAuth.create_user_info_button({
"type": "text",
"text": "微信授权登录",
"style": {
"left": 80,
"top": 400,
"width": 220,
"height": 50,
"lineHeight": 50,
"backgroundColor": "#07c160",
"color": "#ffffff",
"textAlign": "center",
"fontSize": 22,
"borderRadius": 10,
}
}, func(success: bool, result: String):
if success:
var info = JSON.parse_string(result)
var user_info: Dictionary = info.get("userInfo", {})
print("昵称: ", user_info.get("nickName", ""))
)
WeChatAuth.destroy_user_info_button()

授权按钮的坐标使用微信 CSS 像素,不是 Godot viewport 坐标。重复创建按钮时会自动销毁前一个按钮,但仍建议在登录流程结束、页面切换或超时后主动调用 destroy_user_info_button()

横幅广告:

WeChatBannerAd.create("ad-unit-xxx", {
"left": 0,
"top": 0,
"width": 320,
})
WeChatBannerAd.show(func(success: bool, result: String):
print("Banner 显示: ", success)
)
WeChatBannerAd.hide()
WeChatBannerAd.destroy()

插屏广告:

WeChatInterstitialAd.create("ad-unit-xxx")
WeChatInterstitialAd.show(func(success: bool, result: String):
if success:
print("插屏广告已关闭")
else:
print("插屏广告展示失败: ", result)
)

激励视频广告:

WeChatRewardedVideoAd.create("ad-unit-xxx")
WeChatRewardedVideoAd.show(func(success: bool, result: String):
if success:
var data = JSON.parse_string(result)
if data.get("isEnded", false):
print("用户看完了广告,发放奖励")
else:
print("用户中途关闭了广告")
else:
print("广告展示失败: ", result)
)