王者荣耀Cocos 2d-X Lua 游戏添加苹果内购(一) 图文详解准备流程

友谊提示:最近发现腾讯GVoice有其他一个官网,叫做腾讯游戏服务,经过比照发现是网站才是时的,下面我介绍的不行量是已经废除之,但切莫知晓吧甚总的网站没有直接链接到新网址而是依然保留了。不过新官网的文档更加详实,SDK也有所更新,所以建议去新官网下载SDK和Demo,接入流程基本无什么异常变化。

 

简述

咱项目蒙因故到了实时语音功能,在初期语音 SDK
技术选型的时段测试了融云、声网和腾讯的 GVoice
。融云和声网我还当咱们种被应用了,但是意义还不如上荣耀游戏中之实时语音功能,这简单上好研究了一下腾讯的
GVoice,终于不负众望并。由于腾讯 GVoice
官网的对接流程并无是坏详细,如果光懂 Unity3D 不懂 Android
基础知识的恋人,可能连过程未会见一帆风顺。我便了解一点点 Android
基础,但据和了了几许只坑,下面我就算享受一下自己以 Android 平台对接 GVoice
的历程。

前面备选

资源准备

进入腾讯GVoice官网下载
GVoice SDK 和 Unity3D Demo。如下图:

王者荣耀 1


接通流程

 

1. 导入SDK

优先创造一个空的 Unity 项目
GVoiceDemo,按照官网的连通流程,我们一直拿下载的SDK压缩包解压后拿内部的
Plugins 和 Scripts 两个文本夹都拷贝到 Unity 项目遭到。

     
最近被游戏上加了苹果之内购,这同一片的东西啊是刚刚做得了,总结一下,其实这里不管是耍或者我们日常的App添加内购即同片的事物还是大抵的,多下的部分即使是咱们Lua和OC的互相的有些,以前刚开头开她互相的有的的时节,准备总结一下Lua同OC的相的,就是它互相的调用和传参,在及时简单篇文章被附带就一同总结了。要未雨绸缪内购的事体首先你如果出一个开发者账号!当然是参加开发者的账号,不是一个Apple
ID
登录Developer之后就OK的,这点相信做iOS的伙伴都知道,就不再累赘啦!下面我们同样步一步之初始准备工作。下片文章我们总结具体的代码内容。

2. 创建 Jar 包

以Unity项目导出成安卓项目,导出路径选择之一指定的公文夹,我这里在桌面新建了一个叫
unity_gvoicedemo 的文书夹,将项目导出到该公文夹着,操作而下图:

王者荣耀 2
导出成功后会见变动 GCloudVoice 和 GVoiceDemo 两独文本夹,用 eclipse
将马上半个门类同步导入,如下图

王者荣耀 3

导入成功后,在 UnityPlayerActivity 项目下新建一个 MainActivity
类,继承自 UnityPlayerActivity,详细代码如下:

package com.shehweiwei.gvoicedemo;

import android.os.Bundle;

import com.tencent.gcloud.voice.GCloudVoiceEngine;
// 注意:下面这句代码必须有,如果没有可能会导致闪退
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        GCloudVoiceEngine.getInstance().init(getApplicationContext(), this);
    }
}

瞩目:代码中自然要引入com.unity3d.player.UnityPlayerActivity以此包,如果没有引入则进下就是闪退,这里是只大坑,我到底才爬出来。
下一场,选中 MainActivity.java 文件,右键选择 Export -> Java -> JAR
file, 然后点击 Next 按钮, 接下来操作而下图:

王者荣耀 4

最后,生成一个 GVoiceDemo.jar 文件。

 

3. 导入外文件

用下载的 unity_demo.zip 压缩包解压后拿其中的
unity_demo\Assets\Plugins\Android 目录下的 AndroidManifest.xml 和
android-support-v4.jar 简单只文件拷贝到品种的 Plugins\Android
目录下。注意还产生个GCloudVoiceDemo.jar
文件我们从没拷贝,这里我们采取上亦然步创建的 GVoiceDemo.jar
文件来取代。注意 jar 包中的包名必须同 AndroidManifest.xml 文件与 Unity
编辑器中PlayerSettings的 Bundle Identifier 包名保持一致。所以,要管
AndroidManifest.xml 文件中之 package="com.example.gcloudu3ddemo"
这同一句代码修改成 package="com.shehweiwei.gvoicedemo"

注意:AndroidManifest.xml 文件中之入口 Activity 的讳务必跟创办的
Jar 包中的新建的 Activity 名字保持一致。这里的入口 Activity 叫
MainActivity,所以 AndroidManifest.xml
文件被的代码为android:name=".MainActivity",当然也堪写成
android:name="com.example.gcloudu3ddemo.MainActivity"

开展外购   

4. 构建Unity场景

此地自己用uGUI搭建了一个简的界面,有六只按钮分别调用 GVoice SDK 的六独
API ,然后一个 Text 用来展示回调结果。界面效果使下图:
王者荣耀 5
接下来新建一个 GVoiceDemo 的 C# 脚本,脚本代码如下:

using UnityEngine;
using gcloud_voice;
using UnityEngine.UI;
using System;

public class GVoiceDemo : MonoBehaviour
{
    // 用来显示调用API返回的结果
    public Text result;

    private IGCloudVoice m_voiceengine = null;

    // TODO: 这里的appId和appKey使用的是官方提供的测试值,正式项目中可使用申请的值
    private const string appId = "932849489";
    private const string appKey = "d94749efe9fce61333121de84123ef9b";
    // TODO: 这里使用的是测试账号,所以房间名使用默认的100,正式项目中可根据实际情况赋值
    private string roomName = "100";

    void Start()
    {
        if (m_voiceengine == null)
        {
            m_voiceengine = GCloudVoice.GetEngine();
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            string strTime = System.Convert.ToInt64(ts.TotalSeconds).ToString();
            // TODO: 这里用时间模拟了一个openId,在正式项目中应该把这里的strTime换成用户唯一ID
            m_voiceengine.SetAppInfo(appId, appKey, strTime);
            m_voiceengine.Init();

            // 注册SDK常用回调监听
            m_voiceengine.OnJoinRoomComplete += OnJoinRoom;
            m_voiceengine.OnQuitRoomComplete += OnExitRoom;
            m_voiceengine.OnMemberVoice += OnMemberVoice;
        }
    }

    void Update()
    {
        if (m_voiceengine != null)
        {
            // 不断检测GVoice引擎回调
            m_voiceengine.Poll();
        }
    }

    void OnApplicationPause(bool pauseStatus)
    {
        if (m_voiceengine == null)
        {
            return;
        }

        // 应用暂停时GVoice引擎也暂停,应用重新开始时引擎继续
        if (pauseStatus)
        {
            m_voiceengine.Pause();
        }
        else
        {
            m_voiceengine.Resume();
        }
    }

    /// <summary>
    /// 加入房间,BtnJoin按钮点击调用
    /// </summary>
    public void JoinRoom()
    {
        m_voiceengine.SetMode(GCloudVoiceMode.RealTime);
        int ret = m_voiceengine.JoinTeamRoom(roomName, 15000);

        result.text += "\nJoinRoom:" + ret;
    }

    /// <summary>
    /// 退出房间,BtnExit按钮点击调用
    /// </summary>
    public void ExitRoom()
    {
        int ret = m_voiceengine.QuitRoom(roomName, 6000);
        result.text += "\nExitRoom:" + ret;
    }

    /// <summary>
    /// 打开麦克风,BtnOpenMic按钮点击调用
    /// </summary>
    public void OpenMic()
    {
        int ret = m_voiceengine.OpenMic();
        result.text += "\nOpenMic:" + ret;
    }

    /// <summary>
    /// 关闭麦克风,BtnCloseMic按钮点击调用
    /// </summary>
    public void CloseMic()
    {
        int ret = m_voiceengine.CloseMic();
        result.text += "\nCloseMic:" + ret;
    }

    /// <summary>
    /// 打开扬声器,BtnOpenSpeaker按钮点击调用
    /// </summary>
    public void OpenSpeaker()
    {
        int ret = m_voiceengine.OpenSpeaker();
        result.text += "\nOpenSpeaker:" + ret;
    }

    /// <summary>
    /// 关闭扬声器,BtnCloseSpeaker按钮点击调用
    /// </summary>
    public void CloseSpeaker()
    {
        int ret = m_voiceengine.CloseSpeaker();
        result.text += "\nCloseSpeaker:" + ret;
    }

    /// <summary>
    /// 加入房间回调
    /// </summary>
    /// <param name="code"></param>
    /// <param name="roomName"></param>
    /// <param name="memberID"></param>
    private void OnJoinRoom(IGCloudVoice.GCloudVoiceCompleteCode code, string roomName, int memberID)
    {
        result.text += string.Format("\nOnJoinRoom ---> code: {0}, roomName: {1}, memberID: {2}", code, roomName, memberID);
    }

    /// <summary>
    /// 退出房间回调
    /// </summary>
    /// <param name="code"></param>
    /// <param name="roomName"></param>
    /// <param name="memberID"></param>
    private void OnExitRoom(IGCloudVoice.GCloudVoiceCompleteCode code, string roomName, int memberID)
    {
        result.text += string.Format("\nOnExitRoom ---> code: {0}, roomName: {1}, memberID: {2}", code, roomName, memberID);

        m_voiceengine.OnJoinRoomComplete -= OnJoinRoom;
        m_voiceengine.OnQuitRoomComplete -= OnExitRoom;
        m_voiceengine.OnMemberVoice -= OnMemberVoice;
    }

    /// <summary>
    /// 有成员说话时回调
    /// </summary>
    /// <param name="members"></param>
    /// <param name="count"></param>
    private void OnMemberVoice(int[] members, int count)
    {
        result.text += string.Format("\nOnMemberVoice ---> count: {0}, roomName: {1}, memberID: {2}", count);
    }
}

用 GVoiceDemo
脚本上加到Canvas对象上,然后将脚本中对应之法子注册到相应的按钮的OnClick事件及,保存状况,然后运行至手机上,使用有限独手机便可以语音聊天了,效果使下图:

王者荣耀 6


另事项

遵点的流水线并了的项目并无克在PC上运行,如果一旦于PC上运行无报错,可以拿下载的
unity_demo.zip 文件解压后底 unity_demo\Assets\Plugins 目录下的 X86 和
x86_64 两个公文夹拷贝到项目的 Plugins
文件夹下,这样PC上运行就无会见报错。因为自这里没有麦克风设备,不明了在PC上能够免可知用语音聊天,有极的朋友可以试,有结果了可以举报给自己,先谢过了!

 

类源码

本人将种的源码托管在了Github上了,
有亟待之爱侣自取。种类链接点这里


本文作者: Sheh伟伟
正文链接: http://davidsheh.github.io/2017/05/27/Unity3D集成腾讯语音GVoiceSDK/
版权声明: 本博客所有文章除特别声明外,均以 CC BY-NC-SA
3.0 许可协商。转载请注明出处!

      进这里 iTunes Connect
,我们尽管一律步一步的仍图文的说一步一步之长入,自己正开做的时光吗是这般看正在同行们写的博文一步一步添加的,大概还说的要命好的,只是发来细节无是公在同等首文章里就能铺抓的顶之,当然好总结的或是啊会见生出诸如此类那样的疏漏,欢迎帮自己补偿….

王者荣耀 7

 

率先步: 协议、税务和银行业务


      一:进这里首先步后应该是底下这样的界面:
    王者荣耀 8

 

      补充:
1、要是上后休是这样的,可能就是提醒而的街信息写错了之,因为它们是限量了字符的个数的,这个比广泛,比如下面这样,我好之吗是如此:

  王者荣耀 9

 

               
 2、这其间的事物填充了提交之后是要审批信息的,不然你乱填银行信息Apple也为您了,到头来银行信息不得法,那就算不好了!所以若见到底面的来结束日期的(Effective
Date 和 Expiration)的是查处了了底,要无喽的言辞这里当是 Processing
的状态。

                 3、你这边填写的联络员(Contact Info)和银行信息(Bank
Info)是从未关联之。

 

      二:联系人填写

 

王者荣耀 10

      点击了增长沟通人之后要您填写下面的音:

    王者荣耀 11

  

      三:银行信息填写

      第一步:

王者荣耀 12

    

      第二步:

王者荣耀 13

 

      第三步:

王者荣耀 14

   
  您得点击这里询问者我们说的现代化支付行号

      第四步:

王者荣耀 15

 

     
填写了之后,需要的即是确认你上面填写的音讯,注意点击左下角的局面确认!这样尽管好回地方说之填银行信开始那里,选择你刚刚填写的这卖信息,这样银行信就终于填写完成了!

 

      四:税务信息

    王者荣耀 16

 

     
这个上以后需要我们填写的信不是众多,有些权限是内需我们肯定的,具体的禁闭我们下图片的标记处:

 王者荣耀 17

 

 王者荣耀 18

 

王者荣耀 19

 

      补充:
上面立有的填就将我们眼前的情商就无异有的东西啊即填写完毕了。

     
注意:上面的立即片情节是用对的,大概也即是隔天会有结果的,要是审核还没有经过,下面的操作而跟着开扫尾,然后根据我们后面的代码去要商品信息的当儿是匪克请到信息之。这或多或少消注意一下,因为好在这里跳了坑,请求了遥遥无期且要不交商品信息!!

 

项目增长内购


 

     
上面的磋商就部分的情做了事后您不怕好错过创造我们的门类,给咱们的门类增长内购了,我们于随着看路增长内购,首先这创造项目之:

 

王者荣耀 20

 

     
上面创建了App之后咱们进入,给咱们的类增长内购项目,看下面的希冀,根据图中的提醒创建而的内购项目:

 

王者荣耀 21

 

       点击上加 +
,进入我们我们得以看到它会于您挑内购项目之门类,要是游戏币这种的备是属消耗型项目了,你只要买购买线上书籍,或者电影什么的应该是不消耗型项目了。

自然或许还生外的现实的您不怕得上网搜一下了。

 

王者荣耀 22

 

     
下面是凡对内购项目信息的一个具体的叙说,你可以对照图中针对各个一样项之知晓自己填写进去:

 

王者荣耀 23

 

     
 再说说这个价格的定义,这里出好几或者要说一下,你若是玩玩游戏的是时刻体验一下他们之开支(看一下充值数额即可)你会发觉,支付且是没有一个祥和填写充值多少这种效益的。很多小伙伴可能都觉着苹果充值的金额要是6的翻番,其实为不然!

     
比如:王者荣耀可能多总人口游玩,不知晓出无产生冲钱的时候注意到,它是产生1元,45元这种布局当其间的,当然你啊欲这种充值金额之早晚,该怎么开为?

     
这里自己说一下融洽之知,应该是根据选择的异之充值数额判断失受你请不同的制品!首先你如解下面苹果提供给你拣的金额之意是此您长的出品的单价是微!!!再具体的代码中,你你得传入的虽是相应使打的个数,相信这样说罢大家也就是理解了!

     
下面是一个大概的金额选择图示,上面的即是自自己了解的怎么贯彻市同片,45片当货物的贯彻思路,具体的以末端的代码中我们在仔细的说!

 

王者荣耀 24

 

     
剩下的东西我们就是仍好的需要填写,以前的有的章中本身望还有语言选择什么之类的,以前的本子中应是存的,现在应有是没那些选择了。填写了这里的音就是终于我们把完整的叫好种上加内购即同一片的东西处理完了!接下我们看添加沙盒测试员。

 

补给加沙盒测试


 

     
按照我们最上面一样摆放图供的进口,点击进入添加沙盒测试员,你会相底的情节需要你填写:

      王者荣耀 25

      注意一点: 在你拣App Store地区的当儿择 中国区 !

 

脚在总结一下斯测试账号具体的以和用的下的有些注意事项


       

      1、 退出iPhone的App Store账号(因为咱们得运用沙盒账号登录)

           操作方法一:打开App
Store应用首页滑到最好下方–选中AppleID–注销

           操作方法二:设置–iTunes Store与App Store–选中AppleID–注销

      2、在操作了方的退出而手机用的App ID 账号后不要当App
Store或者iTunes里面去登录测试账号。

     
3、进入你的型,写了代码之后调用苹果支付,正常的状态(就是要到现实的商品信息,这点我们以代码有在实际的前述)下会产出下面的界面,我们选取“使用现有的Apple
ID”登录我们的沙盒测试账号:

 

王者荣耀 26

     

     
4、不管你拣的凡什么品种的内购项目项目及安装的金额,按照自其实测试中的结果它都是勿容许超过十独之!

     
5、请在你补充加到开发者账号项目里面测试,不要管去哪下载一个内购的Demo,然后就是变更一个货ID(具体的用法代码中我们细说)就开测试,项目的号和Bundle
ID都非雷同,商品信息你是取得不顶的。这点使顾,言外之了,就是你要管你发起内购测试的档次与汝上加开发者了内购的种类基本信息是使同的!!!

     
6、不要使越狱的测试机测试,也无须动模拟机,使用非越狱的真机测试内购,原因就是是它俩还非能够开展沙盒存储值,所以无可以!
 

      7、项目落得丝了的包不要在采用沙盒测试账号购买!

      购买成功后便是下边的图例:

  

王者荣耀 27

 

 王者荣耀 28

  

    最后一词: 下首文章我更新代码Lua 和 OC
代码有的始末,写以一道篇幅就太丰富啦!有要交流之同行可以当自的主页加我的QQ哈。O(∩_∩)O

    Cocos 2d-X Lua 游戏添加苹果内购(二)
OC和Lua交互代码详解

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website