You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron中使用APNS注册推送通知失败问题求助

问题解决方案

1. 解决APNS注册失败及签名配置问题

检查Bundle ID完全一致性

确保Electron配置中的appBundleId与Apple开发者后台创建的Bundle ID完全一致,包括大小写、前缀后缀,不能有任何拼写错误。例如后台是com.yourcompany.yourapp,Electron配置里必须完全匹配。

修正权限文件(entitlements.plist)

权限文件必须包含正确的APNS环境、团队ID和Bundle ID,示例内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>com.apple.developer.aps-environment</key>
  <string>development</string> <!-- 生产环境替换为production -->
  <key>com.apple.application-identifier</key>
  <string>TEAM_ID.com.yourcompany.yourapp</string> <!-- TEAM_ID为你的Apple开发者团队ID -->
  <key>com.apple.developer.team-identifier</key>
  <string>TEAM_ID</string>
</dict>
</plist>

注意:aps-environment的值必须与你使用的配置文件环境一致(开发用development,生产用production)。

完善Electron Forge签名配置

在forge.config.js中确保osxSign配置完整,包含权限文件、配置文件路径及签名身份:

module.exports = {
  packagerConfig: {
    appBundleId: 'com.yourcompany.yourapp',
    osxSign: {
      identity: 'Developer ID Application: Your Name (TEAM_ID)',
      entitlements: './test.entitlements.plist',
      entitlementsInherit: './test.entitlements.plist',
      provisioningProfile: './path/to/your/provisioning-profile.mobileprovision',
      hardenedRuntime: false, // 开发环境可关闭,生产环境开启需额外配置权限
    },
  },
  makers: [/* 你的构建器配置 */],
};

清理缓存并重新构建

执行以下命令清除旧缓存后重新构建,避免残留的旧签名信息干扰:

yarn clean && yarn make

验证签名有效性

用codesign命令检查应用的签名权限是否正确:

codesign -d --entitlements - /path/to/your-built-app.app

输出结果中需包含com.apple.developer.aps-environment和正确的Bundle ID信息。

2. electron-forge start与make的区别及开发环境适配

两者核心区别

  • yarn start:启动开发模式,直接加载本地源码,不执行完整打包、签名流程。默认情况下,开发环境的Electron应用未经过正确签名,也不会应用你的配置文件和权限,因此APNS会因为Bundle ID不匹配或权限缺失失败。
  • yarn make:构建分发版本,执行打包、签名、生成安装包全流程,此时会应用你配置的签名信息、权限文件和配置文件,符合APNS的验证要求。

让yarn start支持APNS

开发环境下要启用APNS,需强制在启动前对应用进行签名,修改forge.config.js添加devOptions配置:

module.exports = {
  // ...其他配置
  devOptions: {
    forge: {
      packagerConfig: {
        osxSign: {
          // 与packagerConfig中的osxSign配置一致
          identity: 'Developer ID Application: Your Name (TEAM_ID)',
          entitlements: './test.entitlements.plist',
          entitlementsInherit: './test.entitlements.plist',
          provisioningProfile: './path/to/your/provisioning-profile.mobileprovision',
        },
      },
      sign: true,
    },
  },
};

注意:开发模式签名会增加启动时间,仅在需要测试APNS时开启即可,且确保使用的是开发环境的证书和配置文件(aps-environment为development)。

内容的提问来源于stack exchange,提问作者Fresh Fries Fiesta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:00:20