1

我正在按照本教程设置推送通知>> http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

然而推送通知并没有出现在我的手机上。电话注册成功。提供者成功连接到 apns 并将消息发送到注册的 deviceToken。然而没有通知到来。

从一开始就尝试第二次按照教程进行操作,结果仍然相同。

第三次我像这样测试了我的 ck.pem 文件

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert ck.pem -debug

并得到了这个回报。

Verify return code: 20 (unable to get local issuer certificate)

搜索了一段时间如何解决这个问题,但没有任何帮助。我不知道这是否是手机无法接收消息的原因,但可能是这种情况。任何人都知道我该如何解决这个问题?或者也许还有其他需要检查的东西?我已经第三次一步一步地完成了教程,不知道要寻找什么。APNS 发送消息后不返回任何错误状态。

提供者在 php 中发布代码>>

<?php

$deviceToken = 'c8964c75e5d404f029e2d599d094a2114d219bdb95750ae6501d6f0ce6a3c3b4';

$passphrase = 'DEADFFFF';

$message = 'Check';

////////////////////////////////////////////////////////////////////////////////

$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.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
    echo 'Message not delivered' . PHP_EOL;
else
    echo 'Message successfully delivered' . PHP_EOL;

fclose($fp);

应用程序处于调试模式,服务器证书也用于开发运行代码给出消息成功传递。

4

3 回答 3

1

一切都很好!开发手机越狱,收不到推送通知。在非越狱手机上一切正常,所以远离正在开发的越狱手机!我花了一天时间弄清楚这个...

于 2013-01-11T12:42:49.073 回答
0

对于ssl://gateway.sandbox.push.apple.com:2195,

  • 调试构建
  • 开发代码签名。

如果要使用生产详细信息,请使用ssl://gateway.push.apple.com:2195

于 2013-01-10T15:08:54.503 回答
0

在 Xcode 中,检查您是否使用了正确的配置文件(启用推送并用于开发)。重新启动设备并重试。

于 2013-01-10T15:13:14.110 回答