У меня возникла проблема, и я попробовал все предложения, но без помощи.Я не понимаю, в чем ошибка.Все должно быть идеально, но при вызове fwrite () это выдаст ошибку и остановит дальнейшее выполнение.
Если у кого-то есть идеи по этому поводу, пожалуйста, поделитесь с нами.Спасибо.
Вот моя функция, которую я использую для отправки push-уведомлений на iOS с использованием PHP laravel:
function send_custom_IOSNotification($registatoin_ids, $finalArrayVal, $title, $env = false) {
$passphrase = '1234';
$ctx = stream_context_create();
$path = storage_path();
if($env) {
stream_context_set_option($ctx, 'ssl', 'local_cert', $path.'/apns-dev-cert.pem');
} else {
stream_context_set_option($ctx, 'ssl', 'local_cert', $path.'/pushcert.pem');
}
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
stream_context_set_option($ctx, 'ssl', 'cafile', $path.'/entrust_2048_ca.cer');
if($env) {
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
} else {
$fp = stream_socket_client('tls://gateway.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
}
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
$arrlength=count($registatoin_ids);
Log::useFiles(storage_path().'/logs/notification.log');
for($x=0;$x<$arrlength;$x++)
{
$finalArrayVal['aps'] = array(
'alert' => $title,
'badge' => $registatoin_ids[$x]['badge'],
'sound' => 'default'
);
foreach($finalArrayVal as $key => $value){
$finalArrayVal[$key] = array_map('strval', $finalArrayVal[$key]);
}
updateUserBadges($registatoin_ids[$x]['user_id'],$registatoin_ids[$x]['badge']);
$payload = json_encode($finalArrayVal);
$msg = chr(0) . pack('n', 32) . pack('H*', $registatoin_ids[$x]['device_id']) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
if (!$result) {
Log::info('Message not delivered at '.$x);
fclose($fp);
if($env) {
$fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
} else {
$fp = stream_socket_client('tls://gateway.push.apple.com:2195', $err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
}
} else {
Log::info('Message successfully delivered at '.$x);
}
}
fclose($fp) }