# 闲鱼小游戏快速集成

> 来源：https://help.gravity-engine.com/docs/client-sdk/mini-games/goofish-quickstart
> 介绍 Gravity Engine 闲鱼小游戏 SDK 的安装、初始化、用户注册与事件上报流程，并提供参数说明和调用示例。



本文档主要讲述 **原生闲鱼小游戏** 接入 [引力引擎](https://gravity-engine.com/) 的技术接入方案，在开始接入前，建议您先阅读 [接入前准备](/docs/getting-started/overview)以了解接入必备的基础概念。

> 本接入方案仅适用于官方**原生闲鱼小游戏**开发的项目。如果您使用的是其他游戏引擎（如 Unity、CocosCreator、Laya、Egret 等），请访问[引力引擎 SDK 总览页面](/docs/client-sdk/sdk-overview)选择对应的框架接入文档。

## 1. 获取 AccessToken [#1-获取-accesstoken]

您可以在[设置-应用管理](https://web.gravity-engine.com/#/manage/appmanage)页面点击"查看参数"按钮获取当前应用的 AccessToken，请妥善保存避免泄露。

## 2. 配置并启动 SDK [#2-配置并启动-sdk]

开始接入工作之前，您需要先[下载 SDK](/docs/client-sdk/sdk-overview)。

将 `ge_mg_sdk_version.zip` 中的 `gravityengine.mg.goofish.min.js` 文件导入闲鱼小游戏原生项目中。

```js
import GravityEngine from "./utils/gravityengine.mg.goofish.min.js";
```

引入 SDK 后，即可进行 SDK 初始化参数配置：

> **每次冷启动过程中，`GravityEngine` 的实例化方法 `new GravityEngine()` 与初始化方法 `setupAndStart()` 均只能被调用一次。`clientId` 参数必须在这两个方法的其中一个传入。**

```js
const config = {
  accessToken: "your_access_token", // 项目通行证，在：网站后台-->设置-->应用列表中找到Access Token列 复制（首次使用可能需要先新增应用）
// clientId如果当前还无法获取，可以不传但是不能传空字符串，等后面获取之后通过setupAndStart设置
  clientId: "your_client_id", // 用户唯一标识，如产品为小游戏，则必须填用户openid（注意，不是小游戏的APPID！！！）
  //预设公共属性
  presetSuperProperties:{
       "testSuperKey":"testSuperValue"
   }
};
const ge = new GravityEngine(config);
ge.setupAndStart();
```

> **配置项目合法域名：** 您需要将 `https://api.gravity-engine.com` 配置到开发者后台 request 合法域名列表中。

## 3. 初始化 [#3-初始化]

在用户可以获取到用户唯一 ID 时调用此方法，推荐首次启动时调用。

> 首次调用后，需要在 `initialize` 的 `then` 中才能继续调用其他事件上报的方法
>
> 初始化方法调用成功之后，后续冷启动可以不再调用，只需要正常启动 SDK 即可（多次调用也不会有问题，引力做了兼容）

### 方法示例 [#方法示例]

```js
ge.initialize({
  name: "your_name",
  version: 123,
  openid: "your_openid",
  enable_sync_attribution: false,
  adData:{
       "testAdKey":"testAdValue"
   }
})
  .then((res) => {
    console.log("initialize success", res);
  })
  .catch((err) => {
    console.log("initialize failed", err);
  });
```

### 参数说明 [#参数说明]

| 参数名称                      | 参数含义                                                                                         | 参数类型    | 是否必传 |
| ------------------------- | -------------------------------------------------------------------------------------------- | ------- | ---- |
| name                      | 用户名或用户唯一 ID（可理解为业务中的昵称），如果不需要昵称，可以填默认值，但不可以传空字符串！                                            | string  | 是    |
| version                   | 产品发布版本号，便于后续在引力后台过滤                                                                          | number  | 是    |
| openid                    | 用户 openid                                                                                    | string  | 是    |
| enable\_sync\_attribution | 是否开启同步获取归因信息（参考[同步归因](/docs/attribution/synchronous-attribution)文档）。在媒体点击下发延迟的情况下会影响归因，请谨慎开启 | boolean | 是    |
| channel                   | 当前用户来源渠道，对应用户细查中的：客户端渠道                                                                      | string  | 否    |
| adData                    | 预设归因信息                                                                                       | object  | 否    |

## 4. 事件上报 [#4-事件上报]

### 4.1 业务注册事件上报 [#41-业务注册事件上报]

> **此功能仅适用于需要统计业务注册转化数据的场景。如果您的应用不需要追踪用户注册行为，可以跳过此事件接入。**

> 该方法可多次调用，每次调用都会上报一个用户注册事件（计算指标时会去重）

当用户完成应用内业务注册后，您可以调用 `registerEvent` 方法来上报用户注册事件(`$MPRegister`)给引力，引力会使用该事件统计指标：标准\_注册数

#### 调用示例 [#调用示例]

```js
ge.registerEvent();
```

### 4.2 付费事件上报 [#42-付费事件上报]

> **付费事件上报用于收入统计和分析，如您的应用不涉及内购或付费服务，则无需接入此事件。**

> 如果您需要通过后端 API 方式上报付费事件，请参考 [混合上报模式](/docs/client-sdk/hybrid-reporting) 来接入事件上报接口报送付费事件。

当用户发生付费行为时，需要调用 `payEvent` 方法记录用户付费事件，此事件非常重要，会影响买量和 ROI 统计，请务必重点测试！

#### 方法示例 [#方法示例-1]

```js
ge.payEvent(payAmount, payType, orderId, payReason, payMethod);
```

#### 参数说明 [#参数说明-1]

| 参数名称      | 参数含义                                                                                                                     | 参数类型   | 是否必传 |
| --------- | ------------------------------------------------------------------------------------------------------------------------ | ------ | ---- |
| payAmount | 付费金额，单位为分。请务必注意，传错单位可能会导致买量受到影响！                                                                                         | number | 是    |
| payType   | 货币类型，按照国际标准组织 ISO 4217 中规范的 3 位字母，例如 CNY 人民币、USD 美金等，具体请参考：[国际标准组织 ISO 4217 代码表](https://en.wikipedia.org/wiki/ISO_4217) | string | 是    |
| orderId   | 订单号。引力引擎会通过订单号去重，避免重复上报，请务必准确传入！                                                                                         | string | 是    |
| payReason | 付费原因，例如：购买钻石、办理月卡                                                                                                        | string | 是    |
| payMethod | 付费方式，例如：支付宝、微信、银联等                                                                                                       | string | 是    |

#### 调用示例 [#调用示例-1]

```js
ge.payEvent(300, "CNY", "your_order_id", "月卡", "支付宝");
```

## 5. 接入验证 [#5-接入验证]

> **正式上线之前，请完成本节的校验，否则可能会导致买量上报异常！**

### 5.1 关键事件验证 [#51-关键事件验证]

在引力后台[事件流](https://web.gravity-engine.com/#/manage/metadata/eventFlow)界面开启**加载实时数据**，并在产品中触发以下几个事件。事件流使用说明：[事件流 - 飞书云文档](https://gravityengine.feishu.cn/wiki/ZFmYwiDxfiZe2lkt3occ6yBonpf)

| 事件名  | 事件英文名         | 触发时机       | 采集方式                     | 默认映射到媒体事件 | 备注                      |
| ---- | ------------- | ---------- | ------------------------ | --------- | ----------------------- |
| 用户注册 | `$MPRegister` | 用户完成业务注册之后 | 调用 SDK 的**上报业务注册事件**方法采集 | 暂无        | 接入了**业务注册上报事件**的产品均需要校验 |
| 付费   | `$PayEvent`   | 用户付费之后     | 调用 SDK 的**上报用户付费事件**方法采集 | 付费        | 接入了**付费事件上报事件**的产品均需要校验 |
| 广告展示 | `$AdShow`     | 用户观看广告之后   | 调用 SDK 的**上报广告展示事件**方法采集 | 暂无        | 接入了**广告事件上报事件**的产品均需要校验 |

触发操作后，请在[事件流](https://web.gravity-engine.com/#/manage/metadata/eventFlow)界面中筛选测试用户的 Client ID，观察对应事件是否出现在实时入库页面。若事件数据正常显示，则说明接入成功；如出现于错误数据页面请根据页面错误提示进行排查；如未显示对应数据，请及时联系引力运营支持团队获取协助。

### 5.2 避免重复上报 [#52-避免重复上报]

如果您之前单独接了媒体的回传（SDK 或者 API），则上线之前需要去掉，否则可能会导致重复上报数据！

> 至此验证无误之后，您可以正常上线了。

以上是 SDK 的基础接入指引。如需使用 **行为事件上报、用户属性上报、进阶功能、自动采集** 等功能，请参考以下文档：

> **注意**：这些功能并非所有业务场景都需要，请按需查阅。

* [行为事件上报](/docs/client-sdk/mini-games/track-events)
* [用户属性上报](/docs/client-sdk/mini-games/user-properties)
* [进阶功能](/docs/client-sdk/mini-games/advanced)
* [自动采集](/docs/client-sdk/mini-games/automatic-tracking)
