> For the complete documentation index, see [llms.txt](https://codemash.gitbook.io/codemash/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codemash.gitbook.io/codemash/cloud/push/integrations/providers/safari-push.md).

# Safari Push Notifications

Connect Safari Push Notifications to Push, for website notifications in Safari on macOS.

Safari Push Notifications reach the visitors of your website in Safari on macOS. Norbix signs each request with your **Website Push ID certificate** (a `.p12` file) from Apple.

{% hint style="warning" %}
On our test stack the integration saves, but **Test integration** fails with *A temporary internal error occurred* and a reference id. Sending through Safari Push could not be confirmed; the question is open in the docs program.
{% endhint %}

## Get your credentials

You need a paid membership of the [Apple Developer Program](https://developer.apple.com/programs/enroll/).

1. [Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources) → **Identifiers** → **+** → **Website Push IDs** → enter a description and an identifier such as `web.com.acme.shop` → **Register**.
2. **Certificates** → **+** → **Website Push ID Certificate** → pick the Website Push ID → upload a certificate signing request → download the certificate and open it in Keychain Access.
3. In Keychain Access, export the certificate with its private key as a `.p12` file with a password.
4. Turn the file into base64 in one line, for example `base64 -i webpush.p12` on a Mac. Do not re-wrap or re-type the output.

The certificate expires (usually after a year), and nothing warns you — note the renewal date.

## Connect it in Cloud

**Where:** Push → Integrations → **Add New Integration** → Safari Push Notifications → **Connect** · `/projects/<project>/push/integrations/new/safari-push`

| Field                     | Required | What it does                                           | Example                 |
| ------------------------- | -------- | ------------------------------------------------------ | ----------------------- |
| Website Push Id           | yes      | The id you registered with Apple.                      | `web.com.acme.shop`     |
| Certificate (.p12) base64 | yes      | The base64 text of the `.p12` file. Encrypted on save. | `MIIK…`                 |
| Certificate password      | yes      | The password of the `.p12` file. Encrypted on save.    | `••••••••`              |
| Integration Name          | yes      | The name in your integrations list.                    | `Acme website (Safari)` |

<figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-830086e9b9a310a1432c6127b226ddcf860fd147%2Fsafari-push-form-1.png?alt=media" alt="New Safari Push Integration form filled with Website Push Id web.com.acme.shop, the certificate and password hidden, and Integration Name Acme website (Safari)"><figcaption><p>The filled form (the certificate is made up for the docs).</p></figcaption></figure>

Press **Save**. The page turns into **Editing Safari Push integration** with the badges **ENABLED**, **NOT TESTED**, **NOT CONFIRMED**; the certificate and password are not shown again.

<figure><img src="https://712692422-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHy372bqsaex2cqS3ikhL%2Fuploads%2Fgit-blob-5e021ab58a2465cda872aa1de909ed1626671d94%2Fsafari-push-saved-2.png?alt=media" alt="Editing Safari Push integration with the badges ENABLED, NOT TESTED, NOT CONFIRMED and the Website Push Id filled"><figcaption><p>After save.</p></figcaption></figure>

## Test and set as default

Press **Test integration** at the bottom of the page — see [Test an integration](/codemash/cloud/push/integrations/test.md). Then choose **Actions → Set as default** if campaigns should pick it — see [Set an integration as default](/codemash/cloud/push/integrations/set-default.md).

## Common errors

| Message                                                | Cause                                                       | Fix                                           |
| ------------------------------------------------------ | ----------------------------------------------------------- | --------------------------------------------- |
| A temporary internal error occurred. Reference: ref\_… | Seen on every test on our stack.                            | Open question; give the reference to support. |
| Required                                               | An empty field — on edit also the certificate and password. | Fill every field again.                       |
