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

# Integration

> Check whether the PNLight SDK is connected, see the latest installs, attribution, events, and Remote UI signals, manage test devices, and copy the SDK token from one dashboard page.

The **Integration** page shows whether your app is successfully talking to PNLight. Use it to copy the project SDK token, confirm each signal is arriving after integration, manage App Store integration settings, add test devices, and debug analytics that looks wrong.

Open it from the project sidebar under **Integration**.

## Integration status

The header card summarizes the connection at a glance.

| State           | Meaning                                                   |
| --------------- | --------------------------------------------------------- |
| Connected       | The project received an SDK message in the last 48 hours. |
| Needs attention | The most recent SDK message is older than 48 hours.       |
| Not connected   | The project has never received an SDK message.            |

The card also shows the **SDK version** and **platform** (iOS, React Native, Flutter, or Swift Package Manager) reported by the most recent install, plus the timestamp of the last observed message across all signals.

<Tip>
  If the status is **Not connected** after you ship, double-check that the build uses the project SDK token shown on this page.
</Tip>

## SDK token

The SDK token connects app SDK calls to this PNLight project.

<Steps>
  <Step title="Open the project">
    Select the project in the dashboard.
  </Step>

  <Step title="Open Integration">
    In the project sidebar, open **Integration**.
  </Step>

  <Step title="Copy the SDK token">
    Copy the token shown in the header card.
  </Step>
</Steps>

Pass the token to the SDK initialization method.

<CodeGroup>
  ```swift Swift theme={null}
  await PNLightSDK.shared.initialize(apiKey: "pnlight_sdk_token")
  ```

  ```tsx React Native theme={null}
  await initialize("pnlight_sdk_token");
  ```

  ```dart Flutter theme={null}
  await PNLightSDK.initialize('pnlight_sdk_token');
  ```
</CodeGroup>

## Integration guide

Shortcut buttons link out to the per-platform setup pages:

* [iOS Swift](/sdk/ios-swift)
* [React Native](/sdk/react-native)
* [Flutter](/sdk/flutter)

## App Store integration

The Integration page includes the **AppStore** section for iOS purchase and subscription reporting. Keep these settings aligned with the app that uses the SDK token.

Use this section to:

* Copy the App Store Server Notifications URL.
* Save the App Store Connect issuer ID.
* Save the App Store shared secret.
* Upload the `.p8` in-app purchase key.

After saving the credentials, paste the PNLight notification URL into both the production and sandbox server notification fields in App Store Connect. See [App Store integration](/dashboard/app-store-credentials) for the full iOS setup.

## Test devices

Add test device IDFAs or SDK user IDs when you need a device to always receive Remote UI in test mode. Test devices can receive Remote UI even when normal targeting or capture protection would block it.

Use test devices for QA builds, local validation, and release checks. You can also add or remove a test user from an individual customer profile when you want to debug one SDK user ID. Disable or remove entries when testing is complete.

## Signals

A stepper lists each signal the SDK can send. Each row shows whether PNLight has received that signal, how many messages have arrived, and when the latest one was recorded.

| Signal       | What it means                                                         |
| ------------ | --------------------------------------------------------------------- |
| Installs     | The app called the install/initialization endpoint.                   |
| Attributions | The app forwarded attribution data from a provider such as AppsFlyer. |
| Events       | The app sent a custom in-app event.                                   |
| Remote UI    | The app requested a Remote UI placement and recorded an impression.   |

A signal is flagged **Needs attention** if its latest message is older than 48 hours, even when other signals are healthy. Use this to spot integrations that regressed after a release — for example, attribution stops flowing while installs keep arriving.

## Common checks

If a signal stays **Not received** after release:

1. Confirm the app build is using this project's SDK token.
2. Make sure the relevant SDK call runs on a real device after SDK initialization.
3. For attribution, verify the attribution provider returns data and the app forwards it to the SDK.
4. For Remote UI, confirm a placement exists in [Remote UI placements](/dashboard/remote-ui-placements) and the app requests it.

For deeper debugging, see [SDK setup issues](/troubleshooting/sdk-setup).
