可能是重复的问题。但是我在谷歌搜索时没有看到正确的答案。这是问题。
我有聊天应用程序。并希望使用推送通知来在收到新消息时通知用户。
我在某个地方阅读了我不应该打开和关闭每个收到的消息的连接,并将推送通知发送给用户的地方。我应该打开连接并始终保持与Apple服务器的连接。当有消息时,然后向用户发送通知。
如果是这样,是否有任何示例可以始终保持连接以及何时收到的消息发送给用户通知。
我在某个博客中找到了。
function send_mobile_notification_request($user_mobile_info, $payload_info)
{
//Default result
$result = -1;
//Change depending on where to send notifications
$pem_preference = "production";
$user_device_type = $user_mobile_info['user_device_type'];
$user_device_key = $user_mobile_info['user_mobile_token'];
if ($user_device_type == "iOS") {
$apns_url = NULL;
$apns_cert = NULL;
//Apple server listening port
$apns_port = 2195;
if ($pem_preference == "production") {
$apns_url = 'gateway.push.apple.com';
$apns_cert = __DIR__.'/cert-prod.pem';
}
//develop .pem
else {
$apns_url = 'gateway.sandbox.push.apple.com';
$apns_cert = __DIR__.'/cert-dev.pem';
}
$stream_context = stream_context_create();
stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert);
$apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 2, STREAM_CLIENT_CONNECT, $stream_context);
$apns_message = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $user_device_key)) . chr(0) . chr(strlen($payload_info)) . $payload_info;
if ($apns) {
$result = fwrite($apns, $apns_message);
}
@socket_close($apns);
@fclose($apns);
}
return $result > 0;
}
function create_payload_json($message) {
//Badge icon to show at users ios app icon after receiving notification
$badge = "0";
$sound = 'default';
$payload = array();
$payload['aps'] = array('alert' => $message, 'badge' => intval($badge),'sound' => $sound);
return json_encode($payload);
}
代码来源:http://www.assafelovic.com 此代码打开连接并发送通知,然后关闭连接。当我一天收到1000条消息时,打开/关闭连接请求过多。对这个话题有什么看法吗?
谢谢,如果有重复的问题,抱歉...