我目前正在设置提供商服务器,以将推送通知发送给安装了我的应用的iOS设备。
我正在努力查找工作示例的任何最新版本,但将以下内容放在一起。我没有返回任何错误,但推送通知未显示在我的测试设备上。
我可以确认正在使用最新的设备令牌,并且.pem证书有效。
对此将提供任何帮助。
最好的问候, J
$apnsHost = 'api.sandbox.push.apple.com';
$apnsCert = '/cert.pem';
$apnsPort = 2197;
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
$payload['aps'] = array(
'alert' => array(
'title' => 'Sample push number ' . mt_rand(100, 999),
'body' => 'Sample push body goes here'
),
'badge' => 9,
'sound' => 'default',
'my_value_1' => 'more data',
'my_value_2' => 'even more data'
);
// JSON-encode payload
$output = json_encode($payload, JSON_NUMERIC_CHECK);
// Cancel if payload too long
if(strlen($output) > 2048){
die('Payload too long ('.strlen($output).'): Aborted');
}
// Build the binary notification (correctly)
$token = '185e522cd0e3f35f09sdg398f25fe28038f6a0743339b0a378';
$apnsMessage = chr(0).pack('n', 32).$token.pack('n', strlen($output)).$output;
// Send it to the server
$result = fwrite($apns, $apnsMessage, strlen($apnsMessage));
// Result returns number of bytes sent on success, false otherwise
if(intval($result) > 0){
// Push sent
$response = $result.' bytes sent. $payload size is: '.strlen($output).' (payload limit is 2048 bytes)';
fclose($apns);
}else{
// Push failed
$error = error_get_last();
$response = (is_array($error) ? $error['message'] : 'undefined error');
}
// Show result
die($response);
输出:发送240个字节。 $ payload大小为:171(有效载荷限制为2048个字节)