我正在发送从
PHP到ios的推送
通知.它工作
正常,这是我的
代码:
@H_
304_1@$passp
hrase = '';
$badge = 1;
$path = base_path('path/to/certificate.
PEm');
$ctx =
stream_context_create();
stre
am_context_set_option($ctx,'ssl','local_cert',$path);
stream_context_set_option($ctx,'passphrase',$passphrase);
$fp = stream_socket_client(
'ssl://gateway.sand
Box.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 = fwr
ITe($fp,$msg,strlen($msg));
//
PRint_r($result);exit;
if (!$result) {
self::SavePush($device_token,null,$result);
} else {
self::SavePush($device_token,"sent",$result);
}
fclose($fp);
现在我遇到的问题是,我无法确定通知是否失败,因为$result在每种情况下都包含一个整数,成功或失败.我已经传递了一个随机数字作为标记,它返回115或65之类的整数,每次都会改变.所以!$结果不会工作.我怎么知道通知是否失败?
对fwrite()的
调用将返回它成功发送的
字节数,如果发送
错误则返回FALSE.您的$结果正在更改,因为它会随您发送的
邮件大小而变化.所以知道这
一点,你可以推测,如果$result
=== FALSE那么就会出现
错误并且
通知失败了.如果$result!
== FALSE,则
通知已成功发送.这仅验证消息是否通过网络发送.它不验证消息的结构或令牌的
有效性或类似的东西.
现在,如果您试图找出推送通知消息本身是否有效并且苹果接受并正在处理它,那么您可能希望CURL和HTTP / 2执行此操作.快速谷歌搜索我遇到了这个网站,它显示了如何做到这一点的演示.我没有测试过这个网站http://coding.tabasoft.it/ios/sending-push-notification-with-http2-and-php/,所以无法告诉你演示是否正确.这只是一个快速搜索,但可能会让你走上正确的轨道.