Apple 推送通知不适用于分发,但适用于开发
Posted
技术标签:
【中文标题】Apple 推送通知不适用于分发,但适用于开发【英文标题】:Apple push notification is not working for distribution but working for development 【发布时间】:2013-08-29 07:27:30 【问题描述】:我正在我的应用程序中实现推送通知,在开发部分它工作正常,并且我可以很好地接收推送通知。当我决定在应用商店中发布它时,我实现了它以进行分发(我使用证书和配置文件进行分发),我进行了相同的步骤,并将 .p12 文件通过 shall 转换为 .pem,然后将certificate.pem 和 key.pem 到另一个文件 ck.pem。 在 php 文件中,我执行了以下操作:
$passphrase = 'The passphrase I put it in the shall';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
我已经在我的 php 中将沙箱更改为 ssl://gateway.push.apple.com:2195。
我使用这些步骤创建了 production.pem。
$ openssl x509 -in aps_developer_identity.cer -inform der
-out PushChatCert.pem
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
然后我将我的 ck.pem 上传到我的共享主机。这没什么错误,但它不会推送通知。
在我的 php 中它说:连接到 APNS 消息已成功传递
【问题讨论】:
你是如何解决你的问题的...我有同样的问题...在开发模式下推送通知到达,在生产模式上他们没有。如果我测试使用生产苹果链接生成的生产证书,telnet 响应成功。我做错了什么? 这么多事情,您必须考虑以下几点:确保您已更新新的配置文件、密码和沙箱,并且当您必须尝试时不要发送用于开发设备令牌的推送,因为开发设备令牌与生产设备令牌不同! 【参考方案1】:您可能使用了错误的 deviceToken。请记住,生产 deviceToken 和开发 deviceToken 不同!
您应该记录您的 deviceToken,然后iPhone Configuration Utility 将记录您正确的生产 deviceToken。
【讨论】:
我已经在回答中告诉过你。NSLog
with deviceToken in – application:didRegisterForRemoteNotificationsWithDeviceToken:
然后将您的设备连接到 USB 端口,并使用 iPhone 配置实用程序显示控制台。【参考方案2】:
我相信服务器端不使用分发 PEM 文件。主要的基本规则是应用程序和服务器应该在相同的模式下运行。如果你的应用程序在调试模式下运行,那么服务器也应该使用开发 PEM 文件,就像你的应用程序在发布模式下运行一样,服务器也应该使用分发 PEM文件。
【讨论】:
以上是关于Apple 推送通知不适用于分发,但适用于开发的主要内容,如果未能解决你的问题,请参考以下文章
我正在使用 `fcm` gem 发送推送通知,它适用于 android 但不适用于 IOS
firebase react-native 推送通知适用于 iOS 发布版本,但不适用于通过 App Store 发布的应用程序