> ## 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.

# iOS p8 基于令牌的 APNs 连接

> 设置 .p8 身份验证密钥，通过 OneSignal 将您的 iOS 或 macOS 应用连接到 Apple Push Notification service (APNs)。

向 iOS 应用发送推送通知需要与 Apple Push Notification service (APNs) 的身份验证连接。您可以使用\*\*基于令牌的 (.p8 密钥)**或**[基于证书的 (.p12 文件)](./ios-p12-generate-certificates)\*\*方法进行身份验证——只需要一种。

本指南介绍**基于令牌的 .p8 密钥**，这是推荐的方法。

***

## 要求

在开始之前，请确保您具备以下条件：

* 一个 iOS 或 macOS 应用。
* 具有[**管理员**访问权限](https://appstoreconnect.apple.com/access/users)的[**付费 Apple Developer 账户**](https://developer.apple.com/)。
* 一个 [**OneSignal 账户**](https://onesignal.com)。
* 安装了 Xcode 14+ 的 Mac。
* 启用了**推送通知功能**的 Xcode 项目。

***

## 设置 APNs 身份验证

### 在 Apple Developer 账户中生成您的 .p8 密钥

<Tip>
  有关 Apple 的完整说明，请参阅[创建私钥以访问服务](https://developer.apple.com/help/account/keys/create-a-private-key/)。
</Tip>

1. 登录您的 [Apple Developer 账户](https://developer.apple.com/)。
2. 转到**证书、标识符和配置文件 > [密钥](https://developer.apple.com/account/resources/authkeys)**。
3. 点击**蓝色加号 (+)** 图标。
   * 如果您看不到它，请联系您的管理员获取访问权限。

<Frame>
  <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1e2ff6e-Apple_Key_Page.jpg?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=695489e801fe6cb492ed826e0ea2c22b" alt="Apple Developer 密钥页面，显示用于创建新密钥的蓝色加号图标" width="2616" height="884" data-path="images/docs/1e2ff6e-Apple_Key_Page.jpg" />
</Frame>

4. 选择 **Apple Push Notifications service (APNs)**。
5. 配置密钥时，确保选中**沙盒和生产**：

<Frame>
  <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/p8-sandboxandproductionkey.png?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=1f04581e46bd74cdbc27792b243b952b" alt="Apple Developer 密钥配置，已选择沙盒和生产" width="1232" height="495" data-path="images/docs/p8-sandboxandproductionkey.png" />
</Frame>

6. 输入密钥名称并点击**继续**，然后点击**注册**。

<Frame>
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/312d551-Apple_Key_Page_-_Register.jpg?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=9b88f0e1cdb3fbdba05357ef988a1165" alt="Apple Developer 密钥注册页面，显示继续和注册按钮" width="2622" height="922" data-path="images/docs/312d551-Apple_Key_Page_-_Register.jpg" />
</Frame>

7. **下载您的 .p8 密钥**并安全存储。您将无法再次下载它。

<Warning>
  如果您需要创建新的 .p8 而已经有两个，您**必须先撤销现有密钥中的一个**——它将不再可用。
</Warning>

***

### 将 .p8 密钥上传到 OneSignal

1. 在您的 OneSignal 控制台中导航到**设置 > 推送和应用内 > Apple iOS (APNs) 设置**。

<Frame caption="OneSignal 控制台推送配置页面。">
  <img src="https://mintcdn.com/onesignal/KPVdijCt4_xCbkO8/images/dashboard/push-and-in-app-ios-settings.png?fit=max&auto=format&n=KPVdijCt4_xCbkO8&q=85&s=af9c2dedfc4c8f26f3aeee035cba5eb1" alt="OneSignal 设置页面，显示推送和应用内部分以及 Apple iOS APNs 设置" width="1188" height="654" data-path="images/dashboard/push-and-in-app-ios-settings.png" />
</Frame>

2. 选择 \*\*.p8 认证密钥（推荐）\*\*作为身份验证方法。

<Frame caption="如果从 p12 或另一个 p8 更新，您将有「更新身份验证」的选项">
  <img src="https://mintcdn.com/onesignal/NCUI56Tiw7V-s0dT/images/dashboard/apns-authentication-method-selection.png?fit=max&auto=format&n=NCUI56Tiw7V-s0dT&q=85&s=bb08d987da33025d482b107fc1db1045" alt="OneSignal APNs 身份验证方法选择，显示推荐的 p8 认证密钥选项" width="1188" height="844" data-path="images/dashboard/apns-authentication-method-selection.png" />
</Frame>

提供以下内容：

* **`.p8 文件`** – 您从 Apple Developer 帐户下载的私钥文件。
* **`密钥 ID`** – 一个 10 位字母数字字符串（例如 `ABC123DEFG`），位于您 Apple Developer 帐户[密钥部分](https://developer.apple.com/account/resources/authkeys)中密钥名称旁边。确保它与下载的 .p8 文件匹配。
* **`团队 ID`** – 一个 10 位字母数字字符串（例如 `9A1B2C3D4E`），显示在您的 [Apple Developer 帐户](https://developer.apple.com/account/)右上角团队名称旁边。这与密钥 ID **不同**。
* **`应用包 ID`** – 一个反向域名字符串（例如 `com.example.app`），可在以下位置找到：
  * 您 Apple Developer 帐户的[标识符部分](https://developer.apple.com/account/resources/identifiers/list)，或
  * **Xcode > 主应用目标 > 签名和功能**

<Warning>
  **密钥 ID** 和**团队 ID** 都是在您的 Apple Developer 帐户中找到的 10 位字符串，但位于不同的位置。请仔细检查您没有混淆它们——这是最常见的配置错误。
</Warning>

<Frame caption="查找您的 .p8 密钥详细信息">
  <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/c8d0207041e7c277f7e4ca49a3f6100280ddcbf970fce9b720fddfbda6683bb6-p8.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=fc9c689b0880bda69813428ee7fdbe5f" alt="Apple Developer 帐户，显示密钥 ID 和团队 ID 的位置" width="1445" height="506" data-path="images/docs/c8d0207041e7c277f7e4ca49a3f6100280ddcbf970fce9b720fddfbda6683bb6-p8.png" />
</Frame>

<Frame caption="在 Xcode 中查找您的包 ID">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/35a1fd8940c4964156b9b0b83fbc41772189ae3d2eb29f80318137887344cf4c-ea1f341-Screenshot_2024-06-18_at_3.25.41_PM.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=1ade7692a469b12376088ce5fac6c3c3" alt="Xcode 签名和功能选项卡，显示包标识符字段" width="2830" height="798" data-path="images/docs/35a1fd8940c4964156b9b0b83fbc41772189ae3d2eb29f80318137887344cf4c-ea1f341-Screenshot_2024-06-18_at_3.25.41_PM.png" />
</Frame>

完成后点击**保存并继续**。

<Check>
  您已成功在 OneSignal 中设置了**使用 .p8 密钥的 APNs 身份验证**。

  您的 iOS 应用现在已准备好发送和接收推送通知！🎉
</Check>

***

## .p8 故障排除

<Steps>
  <Step title="检查 .p8 文件格式">
    * 在文本编辑器中打开 `.p8` 文件。

    * 它应该看起来像这样：

      ```text theme={null}
      -----BEGIN PRIVATE KEY-----
      64 character line
      64 character line
      64 character line
      8 character line
      -----END PRIVATE KEY-----
      ```
  </Step>

  <Step title="确保您没有错误上传 .p12 文件">
    * `.p8` 密钥来自您 Apple Developer 帐户的**密钥**部分。
    * `.p12` 证书来自**证书**部分。这些与 .p8 身份验证不兼容。
  </Step>

  <Step title="确认您拥有正确的密钥 ID">
    * 转到您的 [Apple Developer > 密钥部分](https://developer.apple.com/account/resources/authkeys)。
    * 密钥 ID 是密钥名称旁边显示的 10 位字符串（例如 `ABC123DEFG`）。
    * 将您在 OneSignal 中输入的密钥 ID 与下载的 `.p8` 密钥列出的 ID 匹配。
    * **不要与团队 ID 混淆**——两者都是 10 位字符串，但位于不同的位置。
  </Step>

  <Step title="验证团队 ID">
    * 您的**团队 ID** 是在您 [Apple Developer 帐户](https://developer.apple.com/account/)右上角团队名称旁边显示的 10 位字符串。
    * 确保它被精确复制并与生成密钥的帐户匹配。
    * **不要与密钥 ID 混淆**——团队 ID 标识您的开发者帐户，而不是特定密钥。
  </Step>

  <Step title="确保密钥具有 APNs 功能">
    * 在 Apple Developer 中查看您的密钥时，应列出 **Apple Push Notifications service (APNs)** 功能。
    * 如果没有，请撤销密钥并创建一个新的。
  </Step>

  <Step title="等待几分钟">
    * 新创建的密钥可能需要 **10–15 分钟**的传播时间，然后 Apple 才允许外部身份验证。
    * 如果您在创建后立即遇到验证错误，请等待并再次尝试。
  </Step>
</Steps>

### 当所有其他方法都失败时

* 撤销当前的 `.p8` 密钥并从头创建一个新的。
* 仔细检查您使用的是来自创建密钥的同一帐户的**有效包 ID**。
* 联系 [support@onesignal.com](mailto:support@onesignal.com)，提供密钥 ID、团队 ID、包 ID 以及您的 Apple Developer 密钥配置的编辑截图。

***

## 后续步骤

<Columns cols={2}>
  <Card title="iOS SDK 设置" icon="apple" href="./ios-sdk-setup">
    安装 OneSignal SDK，在您的应用中初始化它，并发送测试通知。
  </Card>

  <Card title="移动 SDK 设置" icon="mobile" href="./mobile-sdk-setup">
    选择您的平台，按照适用于 Android、iOS 或跨平台框架的完整 SDK 集成指南操作。
  </Card>
</Columns>

***

## 常见问题

### .p8 和 .p12 有什么区别？

**.p8 密钥**是一种基于令牌的身份验证密钥，不会过期，适用于您 Apple Developer 帐户下的所有应用。**.p12 证书**是特定于应用的，一年后过期，需要每年续期。OneSignal 推荐使用 .p8，因为它更简单且维护成本更低。有关替代方法，请参阅 [.p12 证书指南](./ios-p12-generate-certificates)。

### 我的 .p8 密钥会过期吗？

不会。与 .p12 证书不同，.p8 密钥不会过期。一旦创建，.p8 密钥将一直有效，直到您在 Apple Developer 帐户中撤销它。

### 我可以对多个应用使用一个 .p8 密钥吗？

可以。单个 .p8 密钥适用于同一 Apple Developer 帐户下的所有应用。您可以将同一 .p8 文件上传到多个 OneSignal 应用——每个应用只需要自己唯一的包 ID。

### 我需要配置文件吗？如何创建？

是的，Apple 要求为开发、测试 (Ad Hoc) 和分发到 App Store 使用不同类型的配置文件。

在 Xcode 中，选择**自动管理签名**来自动创建一个。

<Frame>
  <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/63400c422a45ceb7bd54a647c73252bc4221e3d9c62e7a595b4d58f8ae1a8c3e-Screenshot_2025-04-21_at_4.48.21_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=1f8f70d1078a89beb067d442690d6594" alt="Xcode 签名和功能选项卡，已启用自动管理签名" width="2058" height="632" data-path="images/docs/63400c422a45ceb7bd54a647c73252bc4221e3d9c62e7a595b4d58f8ae1a8c3e-Screenshot_2025-04-21_at_4.48.21_PM.png" />
</Frame>

否则，请参阅 [Apple 关于配置文件的文档](https://developer.apple.com/help/account/provisioning-profiles/provisioning-profile-updates)了解详细信息。

***
