Unity平台小游戏引力引擎(Gravity Engine)接入

前言

        引力引擎是一个买量归因平台,我开发的小游戏正好也要用到这个。在接入期间,我也遇到了一些困难和疑惑。本篇文章正是用来记录我在接入的时候遇到的问题和解决方案。希望这个文章对你有所帮助。事先说明,这里的小游戏平台仅仅指抖音和微信这两个平台。如果后续我还遇到更多问题,我会补充说明。

接入SDK

        按照引力引擎官方文档-Unity篇中的介绍。我们可以通过去它给的Github网址,下载其unitypackage。然后通过 Assets > Import Package > Custom Package 导入。我是下载完后直接拉倒项目中导入的。剩下具体的配置说明,请看官方文档,其实跟着做就可以了并没有什么大问题。提醒一下如果你没有用到EDM4U插件,那就不用管它的说明。

        接下来就是代码部分了,实际上跟着官方文档都没有什么太大问题。只是官方文档不仅仅说明了小游戏的情况,我这边仅说明小游戏的部分。我们先启动SDK:

1
2
3
4
5
6
7
8
9
10
11
// 手动初始化(动态挂载 GravityEngineAPI 脚本)
new GameObject("GravityEngine", typeof(GravityEngineAPI));

// 小游戏应用示例
//设置实例参数并启动引擎,将以下三个参数修改成您应用对应的参数,参数可以在引力后台--设置--应用管理中查看
string accessToken = "your_access_token"; // 项目通行证,在:网站后台-->设置-->应用列表中找到Access Token列 复制(首次使用可能需要先新增应用)
string clientId = "your_user_id"; // 通常是某一个用户的唯一标识,如产品为小游戏,则必须填用户的的 openId

// 启动引力引擎
GravityEngineAPI.StartGravityEngine(accessToken, clientId, GravityEngineAPI.SDKRunMode.NORMAL);

(上面是官方的代码)。这个时候你或许有疑惑accessToken在哪里看?如果你仅仅是按照注释说明的网站后台-->设置-->应用列表,你会发现你压根找不到所谓的accessToken。你只能看到你注册的小游戏。实际上你还要选择你要的小游戏,然后点击其查看参数。

然后网站就会弹出如下弹窗:

复制上面的Access Token就可以了。接下来就要启用引擎初始化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class InitializeCallbackImpl : IInitializeCallback
{
// 初始化失败之后回调,errorMsg为报错信息
public void onFailed(string errorMsg)
{
Debug.Log("initialize failed with message " + errorMsg);
}

// 初始化成功之后回调
public void onSuccess()
{
Debug.Log("initialize success");
Debug.Log("initialize call end");
// 建议在此执行一次Flush
GravityEngineAPI.Flush();
}
}

/// <summary>
/// 在引力引擎初始化,后续其他方法均需在本方法回调成功之后才可正常使用
/// </summary>
/// <param name="clientId"></param> 用户唯一标识
/// <param name="nickname"></param> 用户昵称
/// <param name="version"></param> 用户注册的程序版本,比如当前小游戏的版本号
/// <param name="openId"></param> open id (小程序/小游戏必填)
/// <param name="enableSyncAttribution"></param> 是否开启同步获取归因信息,在媒体点击下发延迟的情况下会影响归因,请谨慎开启。具体请参考同步归因:/docs/attribution/synchronous-attribution
/// <param name="initializeCallback"></param> 网络回调,其他方法均需在回调成功之后才可正常使用
/// <exception cref="ArgumentException"></exception>
GravityEngineAPI.Initialize("your_user_client_id", "name_123", 1, "your_openid_111", false, new InitializeCallbackImpl());

(同样是官方的代码)这里要注意的是因为各个平台的提供的功能不同,部分平台获取玩家昵称需要额外的授权申请(说的就是微信)。如果要额外进行获取可能会导致用户流失。但是这里的nickname又不能为空。我的解决方案是参考了网上文章将nickname设置成clientId。

上报信息

        关于上报信息,我想说的也不多,毕竟官方文档中说的很详细了。我只想提一点,那就是————上报消息的即时性。你在使用的时候会发现,明明你设定的都是对的,但是在后台你就是收不到消息。前提,你所有的名字和类型都是正确的情况。那么就只剩下一种可能,那就是上报消息并没有及时发送。此时你只需要在你认为需要及时上报的地方使用下面的代码即可:

1
GravityEngine.GravityEngineAPI.Flush();

这个函数可以上报所有缓存的事件。

遇到的错误总结

  1. TypeError: MiniProgramError Cannot read properties of undefined (reading 'setOpenId') at _SetOpenId

我在微信小游戏平台上遇到这个错误。最后我发现是我将其SDK设置中微信小游戏下的选项勾选起来后出现的。

当我关闭后就正常了。因为我本身也没用到这个,所以直接关闭了。如果你需要,那可能要考虑一下对应的SDK冲突的问题。

参考文章