带有 PHP 的 iOS 13 APNS
Posted
技术标签:
【中文标题】带有 PHP 的 iOS 13 APNS【英文标题】:iOS 13 APNS with PHP 【发布时间】:2019-09-21 21:09:38 【问题描述】:ios 13 现在要求您为警报或背景添加 apns-push-type 的标头。如何将此添加到我用于发送通知的当前代码中?
多年来我一直使用此解决方案发送推送通知,但我不知道如何添加他们需要的标头。
function sendPushNotification($uid,$title,$message,$action,$type,$id)
$deviceToken = "*************";
$passphrase = '***********';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pem/Certificates.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
// Open a connection to the APNS server
if (!$fp)
exit("Failed to connect: $err $errstr" . php_EOL);
//echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => array(
'title' => $title,
'body' => $message,
'action-loc-key' => 'Bango App',
),
'mutable-content'=> 1,
'badge' => 1,
'content-available'=>1,
'sound' => 'oven.caf',
'action' => $action,
'type' => $type,
'id' => $id,
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
fclose($fp);
// Close the connection to the server
?>```
【问题讨论】:
我也遇到了同样的问题,你找到解决办法了吗?如果你发现了什么,请分享。 【参考方案1】:您可以在 $msg 中传递标题,在我的代码中:
$msg = pack("C", 1) . pack("N",$row['id_device_token']) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $row['device_token'])) . pack("n", strlen($payload1)) . $payload1;
其中 $row['id_device_token'] 是“apns-id”,$apple_expiry 是“apns-expiration”。 根据苹果 (Apple Docs) “apns-push-type”标头必须放在“apns-id”之前,所以:
$msg = pack("C", 1) . pack("N","alert") . pack("N",$row['id_device_token']) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $row['device_token'])) . pack("n", strlen($payload1)) . $payload1;
【讨论】:
我已经尝试过这种方法,但它对我不起作用。没有错误没有通知。甚至 Apple 文档也会询问 3 个必填字段。在你的回答中,我发现只有“apns-push-type”。 您是否也修改了客户端通知代码?现在 Apple 返回设备令牌的方式在 iOS 13 中有所不同。请阅读:onesignal.com/blog/… 是的,我已经修改了。我也问过问题。看到这个。 ***.com/questions/58543104/…以上是关于带有 PHP 的 iOS 13 APNS的主要内容,如果未能解决你的问题,请参考以下文章
Swift iOS 13 推送通知设备令牌在 javascript/php/typescript 中转换
应用程序卡在带有 Xcode 11 测试版的 iOS 13 测试版模拟器上,但在带有 Xcode 10 的 iOS 13 测试版模拟器上运行良好
iOS 13:带有 LeftView 间距问题的 UITextField - Xcode 11