从我的提供商(PHP)服务器向iOS设备发送推送通知

时间:2018-12-31 21:21:23

标签: php ios apple-push-notifications

我目前正在设置提供商服务器,以将推送通知发送给安装了我的应用的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个字节)

0 个答案:

没有答案