# Legacy SDK (deprecated)

PushPushGo SDK is a software development kit that allows you to integrate web push without our integration script, but with customization possibilities.

### Setup

1. Place PushPushGo service worker with your project Id in sw\.js file on the website server.

{% code title="sw\.js" %}

```javascript
importScripts('https://cdn.pushpushgo.com/$projectId/worker.js');
```

{% endcode %}

2. Copy SDK script and place it in the website source code. Integration script has to be placed in the section of website's DOM structure.

{% code title="index.html" %}

```javascript
<head>
    <script src="https://cdn.pushpushgo.com/scripts/sdk.js"></script>
</head>
```

{% endcode %}

3. Initialize SDK client.

```javascript
const config = {
  projectId: $projectId,
  vapidPublicKey: $vapidPublicKey,
  isHTTPS: $isHTTPS,
  endpoint: 'https://api.pushpushgo.com',
  swPath?: $serviceWorkerPath,
  websitePushId?: $websitePushId,
};

const client = new ppg.sdk.Client(config);
```

| parameter        | type      | description                                                           |
| ---------------- | --------- | --------------------------------------------------------------------- |
| `projectId`      | `string`  | required                                                              |
| `vapidPublicKey` | `string`  | required                                                              |
| `isHTTPS`        | `boolean` | required, whetver your website address has `http` or `https` protocol |
| `endpoint`       | `string`  | required, value: `https://api.pushpushgo.com`                         |
| `websitePushId`  | `string`  | optional, for Safari < 16 integration                                 |
| `swPath`         | `string`  | optional, path to `sw.js` file when other than root                   |

### Push notifications

#### `isPushSupport(): Promise<void>`

Check if the browser supports web push notifications.

#### `checkPermission(): Promise<boolean>`

Check for native permission.

### Subscription

#### `register(options?: ISubscribeOptions): Promise<string>`

Register new subscriber - show popup dialog or native permission window

`returns` subscriberId

| parameter | type                   | description |
| --------- | ---------------------- | ----------- |
| `fields`  | `{ customId?: string}` | optional    |
| `tags`    | `string[]`             | optional    |

#### `isSubscribed(): Promise<boolean>`

Check if subscriber is registered

#### `getId(): Promise<string>`

`returns` subscriberId

#### `unsubscribe(): Promise<void>`

Unsubscribe existing subscriber at database

### Custom Id

#### `setCustomId(customId: string | number): Promise<void>`

Sets customId in cloned store

#### `getCustomId(): Promise<string>`

`returns` subscriber's customId

### Labels

#### `appendTags(tags: string[]): Promise<string[]>`

Append tags to store. For tag with labels support use `labelName:tagName` syntax.

| parameter | type       | description |
| --------- | ---------- | ----------- |
| `tags`    | `string[]` |             |

#### `getTags(): Promise<string[]>`

`returns` current subscriber's tags

#### `removeTags(tags: string[]): Promise<string[]>`

Remove tag(s) by label from store For labels support please use `'labelName:tagName'` syntax

#### `getTagsToRemove(): Promise<string[]>`

`returns` subscriber's tags to remove

### Session data

#### `setSelector(selectorName: string, value: string | number | null | boolean): Promise<void>`

Set selector value - field must be declared in application first

#### `clearState(): void`

Clear state, reset values

### Beacons

#### `send(immediately?: boolean): Promise<boolean>`

Set beacon to send on event before unload
