iOS推送通知不适用于分发

时间:2012-03-29 07:06:19

标签: iphone ruby-on-rails ios push-notification apple-push-notifications

我已经为我的应用程序开发了推送通知,它运行正常。当我生成生产(分发)的.p12文件时,它正在创建。在服务器上部署.pem文件后,它正在抛出并发生错误。

OpenSSL :: SSL :: SSLError(SSL_connect返回= 1 errno = 0状态= SSLv3读取服务器s 激情票A:sslv3警报证书未知):“}

服务器:RoR(Ruby on Rails) 任何帮助都会非常明显。

注意: 对于开发.p12,它运行正常。问题是我正在部署分发.p12。请建议我可能遗漏的内容。

谢谢和问候

5 个答案:

答案 0 :(得分:7)

在您的服务器代码中查看

gateway.push.apple.com,分发端口2195

gateway.sandbox.push.apple.com,端口2195

  1. 登录iPhone Developer Program Portal。
  2. 从右侧菜单中选择应用ID。
  3. 创建不带通配符的应用程序ID。
  4. 单击此App ID旁边的Configure链接,然后单击按钮以启动向导以生成新的Development Push SSL证书。用于开发(或)生成新的生产推送SSL证书以进行分发。
  5. 下载此证书并双击aps_developer_identity.cer将其导入您的钥匙串
  6. 启动Keychain Assistant并单击左侧的“我的证书” 展开Apple Development Push Services并选择Apple Development Push Services
  7. 右键单击并选择“导出1个元素...”并另存为apns-cert.p12。 和您的私钥在同一个扩展区域 右键单击并选择“导出1个元素...”并另存为apns-key.p12。
  8. 8.打开终端并将目录更改为用于保存.p12的位置,并使用此命令将PKCS12证书包转换为PEM格式

    i)中。 openssl pkcs12 -clcerts -nokeys -out apns-cert.pem -in apns-cert.p12  ⅱ)。 openssl pkcs12 -nocerts -out apns-key.pem -in apns-key.p12 在这里你必须提供一些访问PHP代码的密钥。

    删除密码短语

    ⅲ)。 openssl rsa -in apns-key.pem -out apns-key-noenc.pem 在这里你必须为删除密码提供相同的密钥。

    最后  ⅳ)。 cat apns-cert.pem apns-key-noenc.pem> APNS-dev.pem。

    现在您可以在ApnsPHP中使用此PEM文件作为证书!

答案 1 :(得分:3)

@Learner

如果所有其他选项都不起作用,那么您应该检查导出p12文件的方式。您应该导出与Apple生产证书相关联的p12文件,我希望它能正常工作..因为它对我有用!!!

答案 2 :(得分:1)

如果您想跳过验证,可以使用此功能。

   require 'net/http'
    require 'openssl'

    class Net::HTTP   alias_method :origConnect, :connect
        def connect
          @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
          origConnect
        end
    end

来源:How to get rid of OpenSSL::SSL::SSLError

但是既然我们想要安全,你应该使用以下

ENV['SSL_CERT_DIR'] = '/usr/share/ca-certificates/'

OmniAuth & Facebook: certificate verify failed

的更多解决方案

答案 3 :(得分:0)

我解决了。这是一个.p12文件错误。我没有创建我必须使用的.p12。

谢谢!

答案 4 :(得分:0)

我正在使用 gem'rpush',它从凭证文件夹中获取了pem文件&将其存储在数据库中。我的解决方案是在更新我的凭证文件夹中的pem文件后,从数据库和重新生成的记录中删除所有旧的Rpush :: Apns :: App记录。

app = Rpush::Apns::App.new
app.name = "ios_app"
app.certificate = File.read("/path/to/sandbox.pem")
app.environment = "sandbox" # APNs environment.
app.password = "certificate password"
app.connections = 1
app.save!

n = Rpush::Apns::Notification.new
n.app = Rpush::Apns::App.find_by_name("ios_app")
n.device_token = "..." # 64-character hex string
n.alert = "hi mom!"
n.data = { foo: :bar }
n.save!