当前位置: 首页 > news >正文

Unity3D 转换微信小游戏指引 05 广告内购

Unity3D 转换微信小游戏指引系列(第五期 完结)

广告

在小程序后台页面找到推广->流量主

流量主入口

开通条件如下:

流量主开通条件

开通之后,需要接入广告组件。

调用创建广告组件的接口时,需要传入参数 adUnitId,这个是开通流量主之后可以获得的。

注意:广告组件是一个单例,仅需创建一次,监听事件也仅需注册一次,否则会有多次回调。

可以创建一个 WXAdManager,提供初始化、显示广告的接口,关闭广告时,判断广告是否完整播放,并调用奖励回调。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WeChatWASM;public class WXAdManager : MonoBehaviour
{static WXAdManager instance;public static WXAdManager Instance{get { return instance; }}WXRewardedVideoAd ad;    // 广告单例Action rewardCallback;   // 奖励回调void Awake(){if (instance != null){Destroy(gameObject);}else{instance = this;}}public void Init(){ad = WX.CreateRewardedVideoAd(new WXCreateRewardedVideoAdParam(){adUnitId = "..." // 自己申请的广告单元 ID});ad.OnLoad((res) =>{Debug.Log($"广告加载 = {res.errMsg}");});ad.OnError((res) =>{Debug.Log($"广告错误 = {res.errMsg}");});ad.OnClose((res) =>{Debug.Log($"广告关闭  是否看完 = {res.isEnded}");OnPlayEnd(res.isEnded);});}/// <summary>/// 显示广告/// </summary>/// <param name="callback">看完广告后的回调</param>public void ShowAd(Action callback){Debug.Log("显示广告");ad.Show();rewardCallback = callback;}/// <summary>/// 广告看完回调/// </summary>/// <param name="isEnd">是否看完</param>void OnPlayEnd(bool isEnd){if (isEnd){Debug.Log("完整看完广告");rewardCallback?.Invoke();}else{Debug.Log("没有看完广告");}}
}

使用时,先进行初始化,要在微信 SDK 初始化之后调用。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WeChatWASM;public class WXDemo : MonoBehaviour
{void Start(){WX.InitSDK((int code)=>{Debug.Log("微信 SDK 初始化");WXAdManager.Instance.Init();GameInit();});}void GameInit(){Debug.Log("游戏主逻辑初始化");}
}

在具体逻辑的位置,调用显示广告的接口,并传入奖励回调函数。

WXAdManager.Instance.ShowAd(()=>
{// 奖励回调Debug.Log("广告完整播放,发放奖励");
});

内购

在小程序后台页面找到功能->虚拟支付

虚拟支付入口

开通条件如下:

虚拟支付开通条件

开通之后,可以接入米大师安卓支付,iOS 系统暂时不支持。

可以创建一个 IAPManager,提供购买的接口,支付成功时,根据产品 ID 发放奖励,也可以调用奖励回调。

这里需要判断运行平台 platform 是安卓,如何获取 platform 参数,可以参考之前的文章《Unity3D 转换微信小游戏指引 03 微信SDK》里面的获取系统参数部分。

在调用支付接口时,参数 offerId 是开通虚拟支付后可以获得的。

需要特别注意的是,参数 buyQuantity 是有限制的,具体限制可以参考 buyQuantity 限制说明。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using WeChatWASM;public class IAPManager : MonoBehaviour
{static IAPManager instance;public static IAPManager Instance{get { return instance; }}public string platform;          // 运行平台public int buyQuantityMul = 10;  // 购买数量的倍数Action rewardCallback;           // 奖励回调void Awake(){if (instance != null){Destroy(gameObject);}else{instance = this;}}/// <summary>/// 发起支付/// </summary>/// <param name="productID">产品 ID</param>/// <param name="callback">支付成功的回调函数</param>public void Purchase(string productID, Action callback){rewardCallback = callback;// 安卓平台if ("android".Equals(platform)){// 价格需要读表,此处只做演示double price = 1;// 规则:buyQuantity * 游戏币单价(0.1元) = 限定的价格等级// 例如:购买价格为 1 元,需要乘以 10,计算出 buyQuantity = 10// 此时 buyQuantity = 10 满足上述规则,即 10 * 0.1 = 1(限定的价格等级)double quantity = price * buyQuantityMul;// 米大师支付WX.RequestMidasPayment(new RequestMidasPaymentOption(){currencyType = "CNY",      // 币种mode = "game",             // 类型offerId = "...",           // 在米大师侧申请的应用 idbuyQuantity = quantity,    // 购买数量 mode=game 时必填env = 0,                   // 0: 米大师正式环境  1: 米大师沙箱环境success = (res) =>{PurchaseSuccessful(productID);},fail = (res) =>{Debug.Log($"购买失败 = {res.errMsg}");}});}else{Debug.Log("暂不支持内购");}}/// <summary>/// 购买成功/// </summary>/// <param name="productID">产品 ID</param>void PurchaseSuccessful(string productID){Debug.Log($"购买 {productID} 成功,发放奖励");rewardCallback?.Invoke();}
}

在具体逻辑的位置,调用发起支付的接口,并传入支付成功的回调函数。

IAPManager.Instance.Purchase("1001", ()=>
{// 奖励回调Debug.Log("支付成功,发放奖励");
});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南
  • Vscode——如何快速搜索项目工程中的某个文件的位置
  • 关于STM32 UART4串口通信出现的N个问题的解决
  • 科技与占星的融合:AI 智能占星师
  • mac下通过brew安装mysql的环境调试
  • Vue3计算属性终极实战:可媲美Element Plus Tree组件研发之节点勾选
  • 文件上传漏洞(ctfshow web151-161)
  • 16现代循环神经网络—深度循环与双向循环
  • 52、PHP 实现选择排序
  • 点脂成金携手北京新颜兴医疗美容医院,共启战略合作新篇章
  • Android 10.0 Launcher 启动流程
  • 开源消息队列比较
  • 【前端 15】Vue生命周期
  • 数据库实验:SQL Server基本表单表查询
  • SpringBoot集成Sharding-JDBC实现分库分表
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【css3】浏览器内核及其兼容性
  • 2019.2.20 c++ 知识梳理
  • MD5加密原理解析及OC版原理实现
  • Mysql5.6主从复制
  • Python - 闭包Closure
  • scala基础语法(二)
  • Web标准制定过程
  • 代理模式
  • 缓存与缓冲
  • 基于webpack 的 vue 多页架构
  • 力扣(LeetCode)56
  • 如何利用MongoDB打造TOP榜小程序
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信小程序填坑清单
  • 在weex里面使用chart图表
  • 正则表达式小结
  • python最赚钱的4个方向,你最心动的是哪个?
  • 交换综合实验一
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #Java第九次作业--输入输出流和文件操作
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (3) cmake编译多个cpp文件
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (计算机网络)物理层
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三)模仿学习-Action数据的模仿
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)VC++中ondraw在什么时候调用的
  • (转载)虚函数剖析
  • ***利用Ms05002溢出找“肉鸡
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑