PHP:向ios发送推送通知

Saa*_*ani 8 php push-notification ios

我正在从php向ios发送推送通知.它工作正常,这是我的代码:

$passphrase = '';
$badge = 1;
$path = base_path('path/to/certificate.pem');
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $path);
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx
);

if (!$fp) {
    self::SavePush($device_token, $message, $device_id, $device_type, $user_id, "pending", "normal", null);
}

//echo 'Connected to APNS' . PHP_EOL;
$body['aps'] = array(
    'alert' => $message,
    'badge' => $badge,
    'sound' => 'default'
);
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $device_token) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));

//print_r($result);exit;

if (!$result) {
    self::SavePush($device_token, $message, $device_id, $device_type, $user_id, "pending", "normal", null, $result);
} else {
    self::SavePush($device_token, $message, $device_id, $device_type, $user_id, "sent", "normal", null, $result);
}

fclose($fp);
Run Code Online (Sandbox Code Playgroud)

现在我面临的问题是,我无法确定通知是否失败,因为$result在每种情况下都包含一个整数,成功或失败.我已经传递了一个随机数字作为标记,它返回115或65之类的整数,每次都会改变.所以!$result不会工作.我怎么知道通知是否失败?

Dan*_*win 6

对fwrite()的调用将返回它成功发送的字节数,如果发送错误则返回FALSE.您的$结果正在更改,因为它会随您发送的邮件大小而变化.所以知道这一点,你可以推测,如果$ result === FALSE,那么就会出现错误并且通知失败.如果$ result!== FALSE,则通知已成功发送.这仅验证消息是否通过网络发送.它不验证消息的结构或令牌的有效性或类似的东西.

现在,如果您试图找出推送通知消息本身是否有效并且苹果接受并正在处理它,那么您可能希望使用CURL和HTTP/2来执行此操作.快速谷歌搜索我遇到了这个网站,它显示了如何做到这一点的演示.我没有测试过这个网站http://coding.tabasoft.it/ios/sending-push-notification-with-http2-and-php/所以无法告诉你演示是否正确.这只是一个快速搜索,但可能会让你走上正确的轨道.