苹果推送通知在开发环境下可以工作,但在发布环境下无法工作。

3

我正在我的应用程序中实现推送通知,在开发部分它工作得很好,我可以成功地接收到推送通知。当我决定将其发布到应用商店时,我为分发实施了它(我使用了分发的证书和配置文件),我执行了相同的步骤,并通过shall将.p12文件转换为.pem文件,然后将证书.pem和密钥.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中将sandbox更改为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 命令也能成功响应。我做错了什么? - prelite
1
有很多事情需要考虑,包括确保您已更新新的配置文件、密码和沙箱,当您尝试操作时,不要发送推送到开发设备令牌,因为开发设备令牌与生产环境的不同! - Fatima
2个回答

0

你可能使用了错误的设备标记(deviceToken)。请记住,生产环境的设备标记和开发环境的设备标记是不同的!

你应该记录下你的设备标记,然后使用iPhone配置实用程序(iPhone Configuration Utility)获取正确的生产环境设备标记。


我在我的答案中已经告诉过你了。在-application:didRegisterForRemoteNotificationsWithDeviceToken:方法中使用NSLog打印设备令牌,然后将您的设备连接到USB端口,并使用iPhone配置实用程序显示控制台。 - Jakub

0

我相信在服务器端不使用分发的PEM文件。主要的基本规则是应用程序和服务器应该以相同的模式运行。如果您的应用程序正在调试模式下运行,则服务器也应该使用开发PEM文件,同样地,如果您的应用程序正在发布模式下运行,则服务器也应该使用分发PEM文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接