Apple 在沙盒上推送通知

Posted

技术标签:

【中文标题】Apple 在沙盒上推送通知【英文标题】:Apple push Notification on sandbox 【发布时间】:2015-05-06 05:35:25 【问题描述】:

我一直在处理苹果推送通知。该代码第一次正常工作并将通知发送到设备。但在第一次通知间隔一段时间后,它不会第二次发送。我不知道为什么会这样。我正在关闭连接。

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ios.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', '1234567881');

// 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) 
    $response['message'] = "Failed to connect: $err $errstr" . php_EOL;
    return $response;

$response['error'] = false;
$response['message'] = 'Connected to APNS' . PHP_EOL;


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

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

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', 'de785a64fd2ee4cc4e0adf067856528c846c0f1e4fe30f88694e59f808f9d3ba') . 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);

die;

【问题讨论】:

您是否收到任何错误消息 没有错误信息,但有一些资源 ID 由于设备令牌,我遇到了同样的问题。一段时间后,设备令牌被更改并且设备停止接收通知。我不知道为什么。您应该检查设备令牌并尝试相同的代码。它应该可以工作。 嗯,已经检查了设备令牌。令牌是正确的。恐怕是连接关闭问题。连接未正确关闭! 【参考方案1】:

我使用的正是一些代码,它运行良好。 也许尝试在最后删除“死”。

【讨论】:

以上是关于Apple 在沙盒上推送通知的主要内容,如果未能解决你的问题,请参考以下文章

推送通知在沙盒模式下不起作用

APNS - 连一个推送通知都收不到

Apple 推送通知 - 从生产应用程序获取空推送令牌 - 将在修复配置文件问题后发送推送令牌

生产中的 iPad 应用程序未请求用户同意推送通知

AdHoc 构建没有收到推送通知

苹果推送通知——分发和开发同时进行