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("支付成功,发放奖励");
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/50208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「C++系列」数组

文章目录 一、数组1. 声明数组2. 初始化数组3. 访问数组元素4. 遍历数组注意事项示例代码 二、多维数组1. 声明二维数组2. 初始化二维数组3. 访问二维数组元素4. 遍历二维数组注意事项示例代码 三、指向数组的指针1. 声明指向数组的指针2. 通过指针访问数组元素3. 指针和数组的…

Android 10.0 framework默认沉浸式状态栏功能实现

1. 前言 在10.0的系统rom定制化开发中,在实现状态栏的某些定制化开发中,在某些产品需要实现沉浸式状态栏,就是需要app 能全屏显示同样也能显示状态栏,接下来就来分析下相关的功能实现 如图: 2.framework默认沉浸式状态栏功能实现的核心类 frameworks\base\core\java\andro…

【神经网络】梯度下降的优化方法【数学公式+代码示例】

文章目录 1、简介2、指数加权平均2.1、公式2.2、代码 3、Momentum⭐3.1、公式演变3.2、代码 4、AdaGrad4.1、计算步骤4.2、代码示例 5、RMSProp5.1、公式5.2、代码5.3、小结 6、Adam6.1、公式和步骤解释⭐6.2、代码⭐6.3、优点 7、何为鞍点8、小结 &#x1f343;作者介绍&#…

国防科技大学深圳地区新生欢送会圆满举行

2024年7月28日&#xff0c;第97个八一建军节来临之际&#xff0c;在这个充满希望的盛夏时节&#xff0c;深圳地区迎来了13名即将踏入国防科技大学的优秀学子。 为了庆祝这一荣耀时刻&#xff0c;并表达对新生的深切祝福&#xff0c;在国防科技大学深圳校友会黄丹会长的积极倡议…

书生大模型实战营--L1关卡-Llamaindex RAG实践

一、安装llamaindex库 pip install llama-index pip install llama-index-embeddings-huggingface 二、问2024年巴黎奥运会 中国队获得几枚金牌&#xff0c;无法回答该问题 三、构建Llamaindex RAG 1、初始化llm 2、构建词向量模型 下载模型&#xff1a;git clone https://…

基于k8s快速搭建docker镜像服务的demo

基于k8s快速搭建docker镜像服务的demo 一、环境准备 如标题&#xff0c;你需要环境中有和2个平台&#xff0c;并且服务器上也已经安装好docker服务 接下来我来构建一个docker镜像&#xff0c;然后使用harbork8s来快速部署服务demo 二、部署概述 使用docker构建镜像&#x…

(2024,通用逼近定理(UAT),函数逼近,Kolmogorov–Arnold定理(KAT),任意深度/宽度的网络逼近)综述

A Survey on Universal Approximation Theorems 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 神经网络&#xff08;NN&#xff09; 3. 通用逼近定理&#xff0…

我的NAS是怎么连接Amazon Web Services S3的

作为IT爱好者&#xff0c;很多家庭都配备了Network Attached Storage&#xff08;NAS&#xff09;&#xff0c;用于存储和管理大量数据。一个常见的挑战是如何实现异地备份&#xff0c;以确保数据的安全性和可恢复性。以下是一些解决方案和工具&#xff0c;可以帮助用户有效地管…

“手撕”MySQL的索引

目录 二、索引的作用 三、索引的缺点 四、如何使用索引 查看索引&#xff1a; 创建索引&#xff1a; ​编辑 删除索引&#xff1a; 五、索引的底层原理 那什么是B树&#xff0c;什么是B树呢&#xff1f; B树的好处&#xff1a; 总结&#xff1a; 一、什么是索引 索…

C语言的周末小练习(贰)

周末小练习&#xff1a; 5、输入身高和体重&#xff0c;计算BMI指数(BMI w/(h*h))。 #include <stdio.h>int main() {float w,h,BMI;/*printf("请输入体重\n");scanf("%f",&w);printf("请输入身高\n");scanf("%f",&h…

vue3 快速入门 (五) : Flex布局

1. 如何变成Flex布局 变成Flex容器&#xff0c;只需在容器布局的节点的CSS中&#xff0c;增加display : flex .mylayout {/* 省略了其他代码 */display: flex; }2. flex direction : 方向 row : 以行排列 row-reverse &#xff1a; 以行反向排列 column &#xff1a;以列排列…

Matlab编程资源库(11)多项式计算

一、多项式的四则运算 1&#xff0e;多项式的加减运算 2&#xff0e;多项式乘法运算 函数conv(P1,P2)用于求多项式P1和P2的乘积。 这里&#xff0c;P1、P2是两个多项式系数向量。 3&#xff0e;多项式除法 函数[Q,r]deconv(P1,P2)用于对多项式P1和P2作除法运算。其中Q返回多项…

【前端 09】JavaScript中的对象与JSON

JavaScript中的对象与JSON 在JavaScript中&#xff0c;对象和JSON&#xff08;JavaScript Object Notation&#xff09;是两个紧密相连但又有区别的概念。它们都在数据处理和交换中扮演着重要角色。本文将详细讲解JavaScript中的自定义对象以及JSON对象的基本概念、格式、用法…

基于微信小程序+SpringBoot+Vue的教务管理系统(带1w+文档)

基于微信小程序SpringBootVue的教务管理系统(带1w文档) 基于微信小程序SpringBootVue的教务管理系统(带1w文档) 在目前的情况下&#xff0c;可以引进一款基于web的高校教务管理系统这样的现代化管理工具&#xff0c;这个工具就是解决上述问题的最好的解决方案。它不仅可以实时完…

python拼接字符串方法

文章目录 1. 使用加号&#xff08;&#xff09;2. 使用str.join()方法3. 使用格式化字符串&#xff08;f-strings, % 操作符, .format() 方法&#xff09;4. 使用列表推导式和join()结合 性能对比 在Python中&#xff0c;字符串拼接是将两个或多个字符串合并成一个新字符串的过…

生成RSA公钥的n值

简介&#xff1a;RSA算法是一种非对称加密算法&#xff0c;与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。 原理是&#xff1a;根据数论&#xff0c;寻求两个大素数比较简单&#xff0c;而将它们的乘积进行因式分解却极其困难&#xff0c;因此可以将…

【leetcode 详解】生成特殊数字的最少操作【中等】(C++思路精析)

题目见下&#xff1a; 测试数据: 解题思路笔记&#xff1a; 最初拿到这道题是很蒙的&#xff0c;联想不到什么数据结构的模型&#xff08;肯定是笔者积累太少了&#xff09;&#xff0c;甚至惯性地想怎么实现“删除数字”的操作&#xff1a;在原字符串中抽出一个字符然后将剩…

VS code 与Pycharm 的使用区别(个人)

注明&#xff1a;本文从这开始VS code简称VS&#xff0c;Pycharm简称PY 安装包大小 VS:PY 1:0 安装后实际大小 vs py VS:PY 2:0 界面ui&#xff08;简易&#xff09; vs py VS:PY 2:1 启动速度 VS:PY 3:1 注&#xff1a;以上为个人测评&#xff0c;无特殊意图

为什么AI会一本正经地胡说八道

泛泛地说&#xff0c;AI一本正经地胡说八道的原因可以归结为&#xff1a;AI的理解能力受到其训练数据和算法的限制&#xff0c;如果问题表达不清晰或者背景信息不足&#xff0c;AI可能会产生错误的推理或输出&#xff1b;AI语言模型本质上是基于统计学习和模式匹配的&#xff0…

第一个设计模式——单例模式

目录 一、特点&#xff1a; 二、实现单例模式步骤 三、饿汉式 四、懒汉式 五、双重检查锁 六、静态内部类 七、枚举 八、可能被反序列化和反射破坏什么意思&#xff1f; 九、如何解决呢&#xff1f; 一、特点&#xff1a; 唯一性&#xff0c;单例模式确保程序中只有一…