> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adjust

> 将 OneSignal External ID 作为 Adjust 合作伙伴参数传递，把 Adjust 的归因和事件回调与 OneSignal 用户关联起来。

Adjust 是一家移动测量合作伙伴 (MMP)，可对您各个营销渠道中的安装、会话和应用内事件进行归因。此集成会将 OneSignal 的 [External ID](./users#external-id) 作为 `onesignal_customer_id` 合作伙伴参数传递给 Adjust，以便 Adjust 能够将它转发到 OneSignal 的事件与正确的用户关联起来。

## 要求

* OneSignal 移动 SDK 版本 5.5.0 或更高版本。
* 在 OneSignal 用户上已设置的 [External ID](./users#external-id)。Adjust 与 OneSignal 之间的数据同步以此 ID 为键，因此该集成无法为匿名用户关联事件。

## 设置

要让 Adjust 的回调抵达正确的 OneSignal 用户，需要满足两个条件：Adjust 必须已配置为将事件转发到 OneSignal，并且您的应用必须在每个会话中将 External ID 作为合作伙伴参数附加。

### 1. 在 Adjust 控制台中启用数据共享

在您的 Adjust 控制台中，启用 OneSignal 集成并选择要转发的事件。Adjust 默认发送 `install` 和 `session` 活动；您还可以映射自定义事件和应用内收入。请按照 Adjust 的 [Set up OneSignal](https://help.adjust.com/en/integrated-partners/onesignal) 指南进行具体操作。

<Note>
  如果没有完成控制台中的这一步，Adjust 就不会向 OneSignal 发送任何回调，下一步中的 SDK 代码也就没有任何回调可以附加 `onesignal_customer_id` 参数。
</Note>

### 2. 将 External ID 作为合作伙伴参数传递

当用户登录您的应用时，调用 OneSignal 的 [`login` 方法](./mobile-sdk-reference#login-external-id)来设置 External ID，然后调用 Adjust 的 `addGlobalPartnerParameter` 方法，其中键为 `onesignal_customer_id`，值为同一个 External ID。Adjust 会在之后的每个回调中转发该键–值对，OneSignal 使用 `onesignal_customer_id` 将回调匹配到正确的用户。

<Warning>
  除 iOS 之外的所有 Adjust SDK 都使用 `(key, value)` 参数顺序。iOS 的 Swift 与 Objective-C 使用 `(value, forKey: key)`。如果错误地将 External ID 作为键传入，集成会在不报错的情况下失效：Adjust 会转发一个以您的用户 ID 字符串命名的参数，而 OneSignal 将永远看不到 `onesignal_customer_id`。
</Warning>

<CodeGroup>
  ```kotlin Kotlin theme={null}
  val externalId = "your_user_id"
  OneSignal.login(externalId)
  Adjust.addGlobalPartnerParameter("onesignal_customer_id", externalId)
  ```

  ```java Java theme={null}
  String externalId = "your_user_id";
  OneSignal.login(externalId);
  Adjust.addGlobalPartnerParameter("onesignal_customer_id", externalId);
  ```

  ```swift Swift theme={null}
  let externalId = "your_user_id"
  OneSignal.login(externalId)
  Adjust.addGlobalPartnerParameter(externalId, forKey: "onesignal_customer_id")
  ```

  ```objc Objective-C theme={null}
  NSString *externalId = @"your_user_id";
  [OneSignal login:externalId];
  [Adjust addGlobalPartnerParameter:externalId forKey:@"onesignal_customer_id"];
  ```

  ```csharp C# theme={null}
  string externalId = "your_user_id";
  OneSignal.Login(externalId);
  Adjust.AddGlobalPartnerParameter("onesignal_customer_id", externalId);
  ```

  ```javascript React Native theme={null}
  const externalId = "your_user_id";
  OneSignal.login(externalId);
  Adjust.addGlobalPartnerParameter("onesignal_customer_id", externalId);
  ```

  ```dart Flutter theme={null}
  final externalId = "your_user_id";
  OneSignal.login(externalId);
  Adjust.addGlobalPartnerParameter("onesignal_customer_id", externalId);
  ```

  ```javascript Cordova/Ionic theme={null}
  const externalId = "your_user_id";

  // Ionic
  OneSignal.login(externalId);

  // Cordova
  window.plugins.OneSignal.login(externalId);

  Adjust.addGlobalPartnerParameter("onesignal_customer_id", externalId);
  ```
</CodeGroup>

有关底层 Adjust SDK 参考，请查看 Adjust 的 Global Partner Parameters 文档：[Android](https://dev.adjust.com/en/sdk/android/features/session-parameters#add-global-partner-parameters) 和 [iOS](https://dev.adjust.com/en/sdk/ios/features/session-parameters/#global-partner-parameters)。

## Deep linking

Adjust 使用 [iOS Universal Links 与 Android App Links](https://www.adjust.com/glossary/deep-linking/) 将推送点击引导至您应用中的特定页面。发送需要打开 Adjust 深度链接的 OneSignal 通知时，请按照 Adjust 的 [Push Notifications](https://help.adjust.com/en/article/push-notifications) 指南所述，将通知的 Launch URL 设置为 Adjust 深度链接。请参阅 OneSignal 的[深度链接指南](./deep-linking)，了解各平台上 Launch URL 的处理方式。

## FAQ

### 什么是 `onesignal_customer_id` 合作伙伴参数？

`onesignal_customer_id` 是 OneSignal 在 Adjust 回调中读取的确切键名，用于将 Adjust 事件与 OneSignal 用户关联起来。请将其值设置为您传递给 `OneSignal.login` 的同一个 External ID。任何其他键名都不会被识别。

### 应该在什么时候调用 `Adjust.addGlobalPartnerParameter`？

每次调用 `OneSignal.login` 时都调用它：在应用启动时一旦获得用户 ID 就调用，账户切换时再次调用。这与 OneSignal 的[登录指南](./mobile-sdk-reference#login-external-id)一致，能让 Adjust 合作伙伴参数与当前的 OneSignal 用户保持同步。

### 用户注销或切换账户时会发生什么？

Adjust 会将全局合作伙伴参数保留在内存中，直到您更改或移除它们。用户注销时，请调用 `Adjust.removeGlobalPartnerParameter("onesignal_customer_id")`（或在下次登录时覆盖其值）。否则，Adjust 会继续把后续事件归到上一个用户的 External ID 上。

### Adjust 会向 OneSignal 发送哪些数据？

默认情况下，Adjust 会转发 `install` 与 `session` 活动，以及您在 Adjust 控制台中映射的任何事件。所转发字段的完整列表记录在 Adjust 的 [OneSignal 集成文章](https://help.adjust.com/en/integrated-partners/onesignal)中。

***

## 相关页面

<Columns cols={2}>
  <Card title="External ID" icon="id-card" href="./users#external-id">
    为您的 OneSignal 用户设置一个稳定的标识符，以便合作伙伴集成能够关联数据。
  </Card>

  <Card title="Mobile SDK: login" icon="mobile" href="./mobile-sdk-reference#login-external-id">
    `OneSignal.login` 的参考文档，包括何时调用及其重试行为。
  </Card>

  <Card title="Deep linking" icon="link" href="./deep-linking">
    为推送、应用内、邮件和短信配置 Universal Links、App Links 和 URI 方案。
  </Card>

  <Card title="Keys & IDs" icon="key" href="./keys-and-ids">
    查找您的 OneSignal App ID 和 REST API Key，用于 Adjust 控制台的设置。
  </Card>
</Columns>
