# Uni-APP快速集成

> 来源：https://help.gravity-engine.com/docs/client-sdk/other-frameworks/uni-app-quickstart
> 介绍 Gravity Engine Uni-APP SDK 的安装、初始化、用户注册与事件上报流程，并提供参数说明和调用示例。





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

> 本接入方案仅适用于 **Uni-APP** 开发的项目。如果您使用的是其他开发框架，请访问 [引力引擎SDK总览页面](/docs/client-sdk/sdk-overview) 选择对应的框架接入文档。

## 支持平台 [#支持平台]

* <img src="/docs-assets/helplook/YOr5yAuJ/68a819f15be16.png" alt="微信小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 微信小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a819ffc6f73.png" alt="支付宝小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 支付宝小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a81a0ec7fa9.png" alt="字节小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 字节小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a81a1e3dc6d.png" alt="百度小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 百度小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a81afc2efc5.png" alt="360小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 360小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a81b0e97ef9.png" alt="快手小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 快手小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a81bde558d7.png" alt="QQ小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> QQ小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/68a81c141c218.png" alt="京东小程序" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> 京东小程序
* <img src="/docs-assets/helplook/YOr5yAuJ/697ac7fca2f07.png" alt="Android" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> Android
* <img src="/docs-assets/helplook/YOr5yAuJ/697ac7fcadd3a.png" alt="iOS" style="{ display: 'inline-block', width: 20, height: 20, verticalAlign: 'middle', margin: '0 6px 0 0' }" /> iOS

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

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

## 2. Native 平台支持 [#2-native-平台支持]

如果您的 Uni-APP 项目需要支持 Android/iOS 原生平台，请分别在 Uni-APP 导出的原生工程中完成对应平台的 SDK 集成，切换下方标签按平台查看：

<Tabs items="['Android', 'iOS']">
  <Tab value="Android">
    ### 接入 Android SDK\[!toc] [#ge-android]

    在 Uni-APP 导出的 Android 项目里，集成 Android 版本的 GravityEngineSDK 即可，参考 [Android 接入文档](/docs/client-sdk/android/quickstart)。
  </Tab>

  <Tab value="iOS">
    ### 接入 iOS SDK\[!toc] [#ge-ios]

    在 Uni-APP 导出的 iOS 项目里集成 iOS 版本的 GravityEngineSDK，参考 [iOS 接入文档](/docs/client-sdk/ios/quickstart)。
  </Tab>
</Tabs>

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

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

将 `ge_mp_sdk_version.zip` 中的 `gravityengine.uniapp.js` 导入工程，并初始化 SDK：

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

```javascript
import GravityAnalyticsAPI from "./utils/gravityengine.uniapp.js";
const config = {
    accessToken: "your_access_token", // 项目通行证，在：网站后台-->设置-->应用列表中找到Access Token列 复制（首次使用可能需要先新增应用）
    clientId: "your_client_id", // 用户唯一标识，如产品为小游戏，则必须填用户openid（注意，不是小游戏的APPID！！！）
    name: "ge", // 全局变量名称
    // 预设公共属性
    presetSuperProperties:{
       "testSuperKey":"testSuperValue"
    },
    enableNative: false, // 是否支持Native
    // Native配置
    mClientIdPriorityOrder: ["OAID","ANDROID_ID"], // Android设备clientID优先级顺序，默认优先取 OAID 为clientId
    foregroundSessionThreshold: 0, // 前台会话阀值
    enableAndroidId: true, // 是否采集android_id，仅支持Android，默认true
    enableOAID: true, // 是否采集oaid，仅支持Android，默认true
    enableIMEI: true, // 是否采集imei，仅支持Android，默认true
    enableMAC: true, // 是否采集mac，仅支持Android，默认true
};
const ge = new GravityAnalyticsAPI(config);
ge.setupAndStart();
```

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

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

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

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

### 4.1 方法示例 [#41-方法示例]

```javascript
ge.initialize({
  name: "your_name",
  version: 123,
  openid: "your_openid",
  enable_sync_attribution: false,
  adData:{
    "testAdKey":"testAdValue"
  },
  // ios 配置
  caid:"", // 当前用户中广协 ID, 类型为json字符串，数组里面是字典，字典里有version和caid字段(可以为空字符串)
})
  .then((res) => {
    console.log("initialize success", res);
  })
  .catch((err) => {
    console.log("initialize failed", err);
  });
```

### 4.2 参数说明 [#42-参数说明]

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

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

### 5.1 业务注册事件上报 [#51-业务注册事件上报]

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

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

当用户完成应用内业务注册后，您可以调用 `registerEvent` 方法来上报用户注册事件（APP：`$AppRegister` / 小游戏：`$MPRegister`）给引力，引力会使用该事件统计指标：标准\_注册数。

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

```javascript
ge.registerEvent();
```

### 5.2 付费事件上报 [#52-付费事件上报]

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

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

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

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

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

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

| **参数名称**  | **参数含义**                                                                                                                 | **参数类型** | **是否必传** |
| --------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | -------- |
| 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]

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

### 5.3 广告观看事件上报 [#53-广告观看事件上报]

> **广告观看上报适用于广告变现类应用，若您的应用未集成广告模块，则无需接入此事件。**

> **抖音小游戏、快手小游戏、B站小游戏无需接入，会由引力后端自动拉取，具体配置，请参考[这里](https://gravityengine.feishu.cn/wiki/SBsxwmeb5iNrPKkUtzCcmisXnzd#OwM8doB35oKDTrxsHKkcvr9Bnqe)**

为生成准确的广告收益分析报表，请尽量遵循规范填写下方的广告平台参数。正确的字段是生成有价值报表的基础。

我们为您准备了详细的指引：👉 [广告聚合平台字段配置说明](/docs/appendix/ad-mediation-fields)

若您的产品内有广告变现，则需要在用户点击广告观看的同时上报用户广告观看事件给引力，具体参考如下：

<Tabs items="['Native', '小游戏']">
  <Tab value="Native">
    ```javascript
    ge.nativeAdShowEvent(adUnionType, adPlacementId, adSourceId, adType, adnType, ecpm);
    ```

    | **参数名称**      | **参数含义**                                                                                                                  | **参数类型** | **是否必传** |
    | ------------- | ------------------------------------------------------------------------------------------------------------------------- | -------- | -------- |
    | adUnionType   | 广告聚合平台类型（取值为：topon、gromore、admore、self，分别对应 Topon、Gromore、Admore、自建聚合）                                                    | string   | 否        |
    | adPlacementId | 广告瀑布流ID（广告位ID）                                                                                                            | string   | 否        |
    | adSourceId    | 广告源ID（代码位ID）                                                                                                              | string   | 否        |
    | adType        | 广告类型（取值为：reward(激励视频广告)、banner(横幅广告)、native(信息流广告)、interstitial(插屏广告)、splash(开屏广告)、video\_feed(视频信息流)、video\_begin(贴片广告)） | string   | 是        |
    | adnType       | 广告平台类型（取值为：csj、gdt、ks、mint、baidu，分别对应为穿山甲、优量汇、快手联盟、Mintegral、百度联盟）                                                        | string   | 否        |
    | ecpm          | 预估ECPM价格（千次展示收入（单位元））                                                                                                     | float    | 建议填写     |
  </Tab>

  <Tab value="小游戏">
    ```javascript
    ge.miniGameAdShowEvent(adType, adUnitId, otherProperties);
    ```

    | **参数名称**        | **参数含义**                                                                                                                      | **参数类型** | **是否必传** |
    | --------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------- | -------- |
    | adType          | 广告类型（取值为：reward(激励视频广告)、banner(横幅广告)、native(信息流广告)、interstitial(插屏广告)、splash(开屏广告)、video\_feed(视频信息流)、video\_begin(贴片广告)）     | string   | 是        |
    | adUnitId        | 广告位ID。一般以 adunit 开头，注意不要填错                                                                                                    | string   | 是        |
    | otherProperties | 自定义参数。其他需要携带的自定义参数，需要提前在引力后台[元数据管理](https://web.gravity-engine.com/#/manage/metadata/eventProperty)中针对广告观看($AdShow) 事件配置好相关属性 | object   | 是        |
  </Tab>
</Tabs>

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

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

### 6.1 关键事件验证 [#61-关键事件验证]

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

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

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

### 6.2 避免重复上报 [#62-避免重复上报]

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

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