Unity3D教程:Unity3D游戏内的付费

article/2025/10/1 18:37:34

一、搭建号沙盒环境

  二、IAP付费流程图:

总体流程图如下:

Unity3D教程:Unity3D游戏内的付费

详细流程图分为带服务端验证和不带服务端验证,本文研究的是带服务端验证,流程图如下:

在Unity中制作IAP主要思想和OC是一样的,只需更改输入接口和输出接口,所以本文主要围绕如何通过C#以插件的形式,在OC跟C#之间建立连接,本质是非托管跟托管之间的连接(托管是可以再公共语言运行库(CLR)上运行的)。

三、接来下我以代码的形式,简短的将整个过程贯穿起来。

首先点击付费按钮之后,调用StoreKit.Install(产品的部分ID);//完整这样com.XXX.XXXX.iap.50,此处填com.XXX.XXXX.iap。StoreKit.Install(产品的部分ID)会调用插件里_StoreKitInstall(productIdPrefix),_StoreKitInstall(productIdPrefix)跟OC建立起了连接,调用相应的OC函数,最后会在OC一个变量中保存产品的部分ID信息。

其次当用户点了某一个购买按钮,向OC发送一次请求,当OC受到请求后,会向App store发送请求,验证当前产品ID是否合法,合法的话,会返回BaseKey,productID,OrderId信息。 UnitySendMessage(“Config”, “BuyComplate_CallBack”, [json UTF8String]);通过这个函数,完成OC和C#一次回调。以json的形式返回给C#产品的订单信息。(UnitySendMessage函数中Config是放置购买脚本的GameObject,BuyComplate_CallBack是购买脚本里面的回调函数)

最后,当客户端收到产品订单后,传给本地服务器,本地服务器拿到产品订单后,再跟App store进行一次验证,返回给客户端验证结果,客户端在更新虚拟货币信息。

四、核心代码

StoreKitPluginEntry.mm和StoreKit.cs是连接OC和C#的桥梁,具体代码如下:

StoreKitPluginEntry.mm static IAPTransactionObserver *observer; static NSString* CreateNSString (const char* string) { return [NSString stringWithUTF8String:(string ? string : "")]; } extern “C” void _StoreKitInstall(const char *productIdPrefix) { if (observer == nil) { observer = [[IAPTransactionObserver alloc] initWithProductIdPrefix:CreateNSString(productIdPrefix)]; } } extern “C” void _StoreKitBuy(const char *productName) { [observer queuePayment:CreateNSString(productName)]; }Source code
StoreKit.cs static string productIdPrefix_; public static void Install(string productIdPrefix) { productIdPrefix_ = productIdPrefix; #if UNITY_IPHONE && !UNITY_EDITOR _StoreKitInstall(productIdPrefix); #endif } public static void Buy(string productName) { #if UNITY_IPHONE && !UNITY_EDITOR _StoreKitBuy(productName); #endif } #if UNITY_IPHONE [DllImport("__Internal")] private static extern void _StoreKitInstall(string productIdPrefix); [DllImport ("__Internal")] private static extern void _StoreKitBuy(string productName); #endif [DllImport ("__Internal")] 是托管跟非托管的桥梁。以下是Mono官网对 [DllImport ("__Internal")] 的说明 To make the runtime lookup the symbol in the current executable, use the special library name __Internal like this, in your DllImport attribute:
using System.Runtime.InteropServices; [DllImport ("__Internal", EntryPoint="DoSomething")]static extern void DoSomething ();The “__Internal” library name will instruct Mono not to look this up in an external library, but to try to satisfy the symbol referenced (DoSomething) in the current executable image.

 Buy.cs购买代码

Source code
public void BuyComplate_CallBack(string result){ string url=”"; print(“result:”+ result); url+=”m=XXX&a=XXX&uid=”+player.PlayerID; Hashtable json=(Hashtable)MiniJSON.JsonDecode(result);//json解析器 productInfo=json["productID"].ToString().Substring(productInfo.Length+1);//截取购买的类型 WWWForm resultPost=new WWWForm();//由于json字节过长,不能采用get方式提交,所以选用Post方式提交 resultPost.AddField(“basyKey”,json["BaseKey"].ToString()); resultPost.AddField(“OrderId”,json["OrderId"].ToString()); resultPost.AddField(“productID”,json["productID"].ToString()); StartCoroutine(BuyComplate(url,str,resultPost)); } IEnumerator BuyComplate(string url,string productId,WWWForm buyInfo)// { WWW productInfo=new WWW(url,buyInfo); yield return productInfo; //print(“data:”+productInfo.text); if(productInfo.error==null) { Hashtable result=(Hashtable)MiniJSON.JsonDecode(productInfo.text); if(result["status"].ToString()==”ok”) { switch(productId) { case “tier1″:player.Gemstone+=50;break; } } } }

到此,Unity之IAP讲述完毕,以下附上原工程和对应的Json解析器。ECPurchase和 testIap下载。


http://chatgpt.dhexx.cn/article/RWsQUr3J.shtml

相关文章

Unity 3D下载安装教程

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 一、官网下载链接 https://unity3d.com/cn/ 但是可能是因为我没翻墙,所以我根本没办法进入这个网页 二、Unity 3D中国…

[转]Unity3D简介

unity简介 本章首先介绍 Unity 3D 的特点、发展历程,然后介绍 Unity 3D 下载及安装方法,最后通过讲解将 Unity 3D 开发的游戏发布于多个平台的方法(PC端举例)。 第一章 Unity 3D是什么?Unity 3D简介 Unity 3D 也称 Unity,是由 Un…

从零开始做一款Unity3D游戏<一>——亲自上手使用Unity

游戏设计入门 游戏设计文档 Hero Born游戏的单页文档 构建关卡 创建基本图形 在三维中思考 材质 白盒环境 光照基础 创建光源 Light组件的属性 在Unity中制作动画 创建动画片段 记录关键帧 曲线与切线 粒子系统 总结 本文主要来自<<C#实践入门>>哈…

【Unity3D入门教程】Unity3D简介、安装和程序发布

《Unity3D入门教程》会带领零基础的初学者&#xff0c;一步步学会使用Unity3D来开发简单的应用程序&#xff0c;走近游戏开发的世界。本系列教程虽然不会面面俱到地深入到全部的知识点&#xff0c;但是会涉及到所有入门阶段所需要掌握的必备技能。通过本教程的学习&#xff0c;…

腾讯Unity3D手游 dll加密分析

此文章的技术内容已过时&#xff0c;仅当做技术存档参考。腾讯的Unity游戏已不再mono.so中加密dll了&#xff0c;而是通过libtprt.so来hook了加载Assembly-CSharp.dll的地方进行解密&#xff0c;解密算法有点复杂&#xff0c;建议用ida动态dump 腾讯有很多用Unity做的手游&…

Unity3d DLL脚本通用解密方法

网上已经有很多文章讲解过Unity3d脚本DLL 解密&#xff0c;基本方法原理都差不多&#xff0c;就是通过HOOK或者调试下断mono_image_open_from_data_with_name这个函数拿到解密后的DLL。这些方法都需要比较专业的知识(Hook或者过反调试)&#xff0c;另外对于使用了强度比较高的第…

Unity3D官方教程爬坑

全是在学官教时遇到的坑&#xff0c;然后数小时后爬出来.同时会添加到处学来的的Unity技巧 ---------------------------------------------------------- 代码&#xff1a; 1.使游戏对象运动的N种方式 更全面的移动方式参考 1、rigidbody.addforce(Vector3 * speed) (见rol…

【Unity3D】自学之路2.0

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 Note: 因上一期 《Unity3D自学之路》 系列教程资源比较旧&#xff08;2018.7.9&#xff09; 很多资源图片资源失效 故更新 《Unity3D自学之路2.0》2020.3.11 船新版本 在新的一年&#xff0c;大家一起加…

[转]【Unity3D入门教程】Unity3D简介、安装和程序发布

《Unity3D入门教程》会带领零基础的初学者&#xff0c;一步步学会使用Unity3D来开发简单的应用程序&#xff0c;走近游戏开发的世界。本系列教程虽然不会面面俱到地深入到全部的知识点&#xff0c;但是会涉及到所有入门阶段所需要掌握的必备技能。通过本教程的学习&#xff0c;…

Unity2019(或2020)个人版如何激活使用(不是破解,正规激活流程)

文章目录 一、下载Unity二、登录账号&#xff08;可用微信号登录&#xff09;三、激活新许可证&#xff08;推荐&#xff09;1、点击激活新许可证2、许可协议3、完成激活 四、手动激活&#xff08;步骤较多&#xff09;1、点击手动激活2、保存许可证申请&#xff08;.alf&#…

【Unity游戏破解】外挂原理分析

文章目录 认识unity打包目录结构 游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包 建议方案锁血飞天无限金币攻击力翻倍 以上统称内存挂透视自瞄压枪瞬移内购破解 Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆 实战查看目录结构用il2cpp dump…

AssetStudio/UnityStudio UABE等 破解Unity游戏

使用AssetStudio/UnityStudio UABE等 破解Unity游戏 前言工具准备前期处理替换图片资源替换配置表/TextAsset替换界面文字/界面UI描述从签名/打包安装/测试 前言 用于研究&#xff0c;学习 工具准备 UABE: 地址&#xff1a;github地址AssetStudio/UnityStudio 地址&#xff…

unity3d手游破解(一)

重点知识&#xff1a; 1. \assets\bin\Data\Managed\Assembly-CSharp.dll扔进Reflectorreflexil环境 2.libs\libmono.so的mono_image_open_from_data_with_name函数 MonoImage *mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, Mon…

【Unity3D】初学加密技巧(反破解)

参考文章&#xff1a; Unity3D研究院之Android加密DLL与破解DLL .SO&#xff08;八十一&#xff09; | 雨松MOMO程序研究院 Unity3D研究院之Android二次加密.so二次加密DLL&#xff08;八十二&#xff09; | 雨松MOMO程序研究院 Unity 2019.4.0 Mono 编译以及加密 windows版…

2021Unity教程:Unity官方中文版免费下载方法(黑皮肤可选)无需破解!

首先科普两个知识点&#xff1a; 1. Unity官方支持个人免费版&#xff0c;新的学习者和初创公司员工&#xff08;公司财务规模低于10万美元一年&#xff09;均可以使用。黑皮肤免费&#xff08;Unity2019.3以上的版本&#xff09;&#xff0c;基本功能齐全&#xff0c;无需破解…

Unity官方支持中文版啦!!!附教程——无需破解!

Chinar blog &#xff1a;www.chinar.xin Unity安装官方中文版教程 本文提供全流程&#xff0c;中文翻译。 Chinar 坚持将简单的生活方式&#xff0c;带给世人&#xff01;&#xff08;拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例&#xff09; Chinar —…

Unity游戏逆向及破解方法介绍

背景介绍 随着手游的发展&#xff0c;Unity3D引擎逐渐成为主流的游戏开发解决方案&#xff0c;传统cocos的2D游戏逐渐被取代&#xff0c;一些公司在Unity3D游戏方面的产出也越来越多&#xff0c;如天天飞车&#xff0c;天天来战&#xff0c;全民破坏神&#xff0c;全民偶像&am…

java之成员变量(实例成员变量和静态成员变量)

类的成员 类的成员可以包含以下&#xff1a;字段、方法、代码块、内部类和接口等。此处我们重点介绍字段. 1.1字段/属性/成员变量 在类中, 但是方法外部定义的变量. 这样的变量我们称为 "字段" 或 "属性" 或 "成员变量"(三种称呼都可以, 一般…

java成员变量的调用_java中对象调用成员变量与成员的方法介绍

java中对象调用成员变量与成员的方法介绍 发布时间&#xff1a;2020-05-06 10:03:53 来源&#xff1a;亿速云 阅读&#xff1a;838 作者&#xff1a;小新 今天小编给大家分享的是java中对象调用成员变量与成员的方法介绍&#xff0c;相信很多人都不太了解&#xff0c;为了让大家…

局部变量和成员变量

局部变量和成员变量的区别&#xff1a; 定义的位置不一样【重点】 局部变量&#xff1a;在方法的内部 成员变量&#xff1a;在方法的外部&#xff0c;直接写在类当中作用范围不一样【重点】 局部变量&#xff1a;只有在方法当中才可以使用&#xff0c;出了方法就不能再用了 成…