Unity苹果(iOS)内购接入(Unity内置IAP)

-----------本教程针对Unity5.4版本!!其它版本需要自己做一些修改-----------
前言:所有这一切的前提是你需要有一个苹果开发者账号,一年99美元,没有的话需要到苹果开发者中心购买。除了本篇教程外,也可以按照Unity官方文档进行开发。文章转自游戏蛮牛 原帖地址


  1. 首先第一步我们需要登录到苹果开发者中心进行我们的APP注册,点击右上角的Account

  2. 输入你的账号密码后就会进入下面这个界面,然后点击左边的齿轮Certificates, Identifiers & Profiles


  3. 然后进入到下面这个界面,在左边的Identifiers下面,点击第一个App ids


  4. 进入之后就会显示你注册过的app,当然如果没有注册过这里是空的,点击右上的“+”添加你的APP,会打开下面这个界面,为了截图我往下拉了一点


注意:首先第一个红框是你APP的名字,自己决定吧。第二个红框可以稍微正式点,一般我们都会写com.公司名.app名字,这样的组合比较有点样子,这个ID后面要用到
然后下面的按默认的也可以,看实际情况调整。弄完之后点最下面的Continue继续后面的操作我就不截图了,注册完回到App ids页面就可以看到你的刚刚注册的app信息

然后我们打开Itunes connect ,登录你的开发者账号进入下面的界面

点击红框的地方进去填写银行的信息。这里有一篇帖子写的很详细!转载一下,感谢睡不着的叶子提供的设置教程 http://www.jianshu.com/p/d9d742e82188

游戏帖子说的很详细后面设置APP内购项目的东西我这里就不重复说一次了,有两个地方需要再说一下,第一:银行信息必须得填好!否则没办法进行沙盒测试到真机上会一直无法初始化成功。第二个是当你创建完你的内购产品时记得添加进你的app里头,一会截图详细说明一下。我们先在itunes connect 里头创建你的app,点击上面那张图里头我的app,进入app管理界面


点击左上角的“+”号然后点击新建APP,红框圈起来的部分就是你刚刚在开发者中心注册时你写的App ids,点击一下就会出现你刚刚注册的id,把剩下的资料填填就可以创建了


然后就会进到这


涉及到公司问题所以资料就打上马赛克了,然后这里开始就设置你的内购产品了,根据上面的发的帖子链接走就可以了。设置完成之后呢点击这里的1.0准备提交进入到app信息设置的界面,然后往下拉,找到下面这图的地方


点击篮筐里头的加号,打开一个小界面,就是下面这样的


这里就会出现你刚刚设置好的内购产品,然后勾选,点击完成。这步很重要,不然没法获得产品信息,设置完后点左上角存储,产品的信息就算完成了
然后这些界面先别关,还有需要用到的信息。接着我们打开Unity,打开我们的工程,点击windows-->Services,就出现下面的菜单往下拉一点就可以看到In-App purchasing


然后我们把他从off的状态点击变成on的状态,导入平台所需的文件


点击红色框的按钮,这里我已经导入了,所以是Update,没导入是Import,点击之后稍等片刻,等他导入完成就好了。然后我们看到官方文档教你如何初始化

using UnityEngine;
using System.Collections;
using UnityEngine.Purchasing;
 
public class PurchaseManager : MonoBehaviour, IStoreListener
{
    private IStoreController controller;
 
    void Start()
    {
        var module = StandardPurchasingModule.Instance();
        ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
        builder.AddProduct("你设置的产品ID", ProductType.NonConsumable);
        UnityPurchasing.Initialize(this, builder);
    }
 
    /// <summary>
    /// Called when Unity IAP is ready to make purchases.
    /// </summary>
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        this.controller = controller;
    }
 
    /// <summary>
    /// Called when Unity IAP encounters an unrecoverable initialization error.
    ///
    /// Note that this will not be called if Internet is unavailable; Unity IAP
    /// will attempt initialization until it becomes available.
    /// </summary>
    public void OnInitializeFailed(InitializationFailureReason error)
    {
    }
 
    /// <summary>
    /// Called when a purchase completes.
    ///
    /// May be called at any time after OnInitialized().
    /// </summary>
    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
    {
        return PurchaseProcessingResult.Complete;
    }
 
    /// <summary>
    /// Called when a purchase fails.
    /// </summary>
    public void OnPurchaseFailed(Product item, PurchaseFailureReason r)
    {
    }
}

这一段是我自己的加了一点东西进去的代码,其实都是文档提供的,稍作了修改,注意“你设置的产品ID”指的是在Itunes connect里头你设置内购产品时的产品ID,就是这个


拷贝到代码里头去,然后我们回到游戏场景中,去到你要进行内购那个游戏界面,添加一个内购按钮,点击Windows-->unity IAP -->Create IAP Button就会在场景中出现一个按钮,点击按钮查看下Inspector可以看到这些


我们可以看到这就是普通的UGUI里头的Button,多了上面这些内容,然后我们点击IAP Catalog..出现下面这个界面


进到这个界面我们配置一下里头需要的信息,ID还是一样填我们在itunes connect中的ID,如果不一样我不知道会怎样,我还没试过,我是怕出错误什么的,所以直接设成一样的然后点“x”关闭窗口,回到Inspector,点击刚刚的IAP Catalog上面的下拉菜单,你就会发现你刚刚设置的ID了,选中他就可以了。然后我们继续敲代码

打开刚刚我们创建的代码,继续添加一段代码,给按钮作为点击事件

public void OnPurchaseClicked(string productId)
  {
      controller.InitiatePurchase(productId);
  }

就是这段,所以我们完整的代码就是酱婶的

using UnityEngine;
using System.Collections;
using UnityEngine.Purchasing;
 
public class PurchaseManager : MonoBehaviour, IStoreListener
{
    private IStoreController controller;
 
    void Start()
    {
        var module = StandardPurchasingModule.Instance();
        ConfigurationBuilder builder = ConfigurationBuilder.Instance(module);
        builder.AddProduct("com.Minesweeper.Init15", ProductType.NonConsumable);
        builder.AddProduct("com.Minesweeper.Init25", ProductType.NonConsumable);
        UnityPurchasing.Initialize(this, builder);
    }
 
    /// <summary>
    /// Called when Unity IAP is ready to make purchases.
    /// </summary>
    public void OnInitialized(IStoreController controller, IExtensionProvider extensions)
    {
        this.controller = controller;
    }
 
    /// <summary>
    /// Called when Unity IAP encounters an unrecoverable initialization error.
    ///
    /// Note that this will not be called if Internet is unavailable; Unity IAP
    /// will attempt initialization until it becomes available.
    /// </summary>
    public void OnInitializeFailed(InitializationFailureReason error)
    {
    }
 
    /// <summary>
    /// Called when a purchase completes.
    ///
    /// May be called at any time after OnInitialized().
    /// </summary>
    public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e)
    {
        return PurchaseProcessingResult.Complete;
    }
 
    /// <summary>
    /// Called when a purchase fails.
    /// </summary>
    public void OnPurchaseFailed(Product item, PurchaseFailureReason r)
    {
    }
 
    public void OnPurchaseClicked(string productId)
    {
        controller.InitiatePurchase(productId);
    }
}

然后保存回到场景中点击IAP按钮,拖动拥有这段代码的GameObject到Button上选择刚才的方法作为点击事件,然后会有下图


画红线的地方写上咱们设置好的产品ID,然后我们可以看到这个按钮还附带了购买成功和购买失败的回调函数,跟添加Button点击事件一样,写好函数拖进去就可以了。最后一个地方就是,导包时,记得将bundle identifier设置成和你的app id一样,上图


在这里可以看ID


就是我画红框的地方,拷贝到unity里头,就可以进行真机测试了。真机测试需要注意几点:首先要登出你手机的app store账号,然后再进入游戏点击刚刚设置的IAP按键,就出弹出让你登录一个账号进行购买。这时你只需要登录刚刚我们在itunes connect中设置好的沙盒测试账号,然后就会出现下面这个画面


会提示说环境是沙盒环境,然后点击Buy就可以了,这时我们的内购接入就大功告成了!第一次写那么长的文章有点hold不住,如果有什么遗漏的可以留言,我会常来看看,我会的地方都会告诉大家,而且大家也可以看unity的官方文档,其实写的很详细,很小部分需要自己琢磨一下,反正我觉得,unity这个集成的相当好,操作起来简单很多。不用怕繁琐,遇到错误就各种搜索找解决方法,最后还是可以弄出来的!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容