小程序 — 如何接入
本章介绍微信小程序接入 EasyFly-Ads 平台的完整步骤,包括 API 集成、广告接入、金币系统和提现功能。
环境要求
| 项目 | 要求 |
|---|---|
| 微信开发者工具 | 最新稳定版 |
| 基础库版本 | 2.10.0+ |
| 小程序类目 | 工具 / 游戏 / 资讯等(非个人主体) |
注意
个人主体的小程序无法使用广告组件。请确保小程序已通过企业认证。
1. 安装 SDK
方式一:NPM(推荐)
bash
npm install easyfly-miniapp-sdk在微信开发者工具中:工具 → 构建 npm。
javascript
// app.js
const EasyFly = require('easyfly-miniapp-sdk')
App({
onLaunch() {
EasyFly.init({
appKey: 'your_miniapp_key', // EasyFly 后台获取
debug: false // 开发阶段开启 true
})
}
})方式二:手动引入
下载 SDK 文件放入 libs/ 目录:
javascript
const EasyFly = require('./libs/easyfly-miniapp-sdk')2. 用户登录
javascript
// pages/login/login.js
Page({
async handleLogin() {
try {
// 1. 获取微信登录凭证
const { code } = await wx.login()
// 2. 调用后端接口换取用户信息
const res = await wx.request({
url: 'https://api.yourdomain.com/miniapp/login',
method: 'POST',
data: { code }
})
// 3. 设置用户信息
EasyFly.setUserInfo({
userId: res.data.userId,
token: res.data.token
})
// 4. 获取用户详细信息
const userInfo = await EasyFly.getUserInfo()
console.log('用户信息:', userInfo)
} catch (err) {
console.error('登录失败:', err)
}
}
})3. 广告接入
激励视频广告
javascript
// pages/reward/reward.js
Page({
onLoad() {
// 创建激励视频实例
this.rewardedVideoAd = EasyFly.createRewardedVideoAd({
sceneId: 'miniapp_reward_unlock' // EasyFly 后台配置的场景ID
})
// 监听事件
this.rewardedVideoAd.onLoad(() => {
console.log('广告加载完成')
})
this.rewardedVideoAd.onClose(res => {
if (res && res.isEnded) {
// 播放完成,调用后端发放奖励
this.handleReward()
} else {
wx.showToast({ title: '观看完才能获得奖励', icon: 'none' })
}
})
this.rewardedVideoAd.onError(err => {
console.error('广告错误:', err)
})
},
// 展示广告
showRewardAd() {
this.rewardedVideoAd.show().catch(() => {
// 加载失败,重新加载
this.rewardedVideoAd.load().then(() => this.rewardedVideoAd.show())
})
},
// 发放奖励
async handleReward() {
try {
const res = await EasyFly.reward('miniapp_reward_unlock')
if (res.success) {
wx.showToast({ title: `获得 ${res.amount} 金币!`, icon: 'success' })
}
} catch (err) {
console.error('奖励发放失败:', err)
}
}
})Banner 广告
html
<!-- pages/index/index.wxml -->
<view class="page">
<!-- 页面内容 -->
<!-- Banner 广告 -->
<easyfly-banner
scene-id="miniapp_banner_home"
bind:load="onBannerLoad"
bind:error="onBannerError">
</easyfly-banner>
</view>javascript
// pages/index/index.js
Page({
onBannerLoad(e) {
console.log('Banner 广告加载成功')
},
onBannerError(e) {
console.error('Banner 广告加载失败:', e.detail)
}
})插屏广告
javascript
Page({
// 在页面返回或切换时展示
onUnload() {
EasyFly.showInterstitial('miniapp_inter_page_leave')
.catch(err => console.log('插屏展示失败:', err))
}
})4. 金币系统接入
javascript
// 查看金币余额
const wallet = await EasyFly.getWallet()
console.log('金币:', wallet.coins)
console.log('可提现余额:', wallet.balance)
// 金币明细
const records = await EasyFly.getCoinRecords({
page: 1,
pageSize: 20
})
// 兑换现金
const result = await EasyFly.exchangeCoins({
amount: 10000 // 10000金币 = 1元
})5. 提现功能接入
提现页面
html
<!-- pages/withdraw/withdraw.wxml -->
<view class="withdraw-page">
<view class="balance">
可提现余额:¥{{balance}}
</view>
<view class="amount-input">
<text>提现金额:</text>
<input type="digit"
placeholder="最低 ¥0.3"
bindinput="onAmountInput"
value="{{amount}}" />
</view>
<view class="methods">
<radio-group bindchange="onMethodChange">
<label>
<radio value="wechat" checked /> 微信零钱
</label>
<label>
<radio value="alipay" /> 支付宝
</label>
</radio-group>
</view>
<button type="primary" bindtap="handleWithdraw">立即提现</button>
</view>javascript
// pages/withdraw/withdraw.js
Page({
data: {
balance: 0,
amount: '',
method: 'wechat'
},
async onLoad() {
const wallet = await EasyFly.getWallet()
this.setData({ balance: wallet.balance })
},
async handleWithdraw() {
const { amount, method } = this.data
if (!amount || amount < 0.3) {
wx.showToast({ title: '最低提现金额 0.3 元', icon: 'none' })
return
}
try {
const res = await EasyFly.withdraw({
amount: parseFloat(amount),
method: method
})
wx.showToast({ title: '提现申请已提交', icon: 'success' })
// 刷新余额
const wallet = await EasyFly.getWallet()
this.setData({ balance: wallet.balance, amount: '' })
} catch (err) {
wx.showToast({ title: err.message || '提现失败', icon: 'none' })
}
}
})6. 订阅消息推送
引导用户订阅消息模板,实现收益到账、提现进度等关键消息推送:
javascript
// 订阅消息模板
wx.requestSubscribeMessage({
tmplIds: ['template_id_1', 'template_id_2'],
success(res) {
console.log('订阅结果:', res)
}
})详情参考小程序推送介绍。
接入检查清单
- [ ] SDK 已安装,初始化正常
- [ ] 用户登录流程完整
- [ ] 激励视频广告加载和展示正常
- [ ] 广告展示 → 服务器回调 → 奖励发放链路完整
- [ ] 金币余额查询正常
- [ ] 兑换功能正常,汇率正确
- [ ] 提现功能正常,到账验证通过
- [ ] 订阅消息授权和推送正常
- [ ] 小程序审核已通过
常见问题
| 问题 | 解决方法 |
|---|---|
| 广告组件报错 | 确认小程序为非个人主体,且已开通广告 |
| 奖励未到账 | 检查服务端回调是否正常接收 |
| 提现失败 | 确认微信商户平台配置正确 |
| SDK 初始化失败 | 确认 AppKey 正确,检查网络请求 |