我在ios13中遇到通知问题。如果我使用gateway.sandbox,则可以看到通知,但是我已经直接从AppStore下载了该应用程序。而是使用gateway.apple,我看到“已将邮件传递到APNS”,但在我的设备上什么也没有。 我还尝试重新创建证书,.p12和.pem文件。
有什么主意吗?谢谢
这是我的php
public function iOS($data, $devicetoken)
{
// $tHost = 'gateway.sandbox.push.apple.com';
$tHost = 'gateway.push.apple.com';
$tPort = 2195;
$tCert = 'pushcert.pem';
$tPassphrase = 'pushcertpsw12';
$tToken = $devicetoken;
$tSound = 'default';
$tPayload = 'APNS payload';
$tBody['aps'] = array(
'apns-priority' => 10,
'badge' => +1,
'alert' => $data['mtitle'] .' ' .$data['mdesc'],
'sound' => 'default'
);
$tBody ['payload'] = $tPayload;
$tBody = json_encode ($tBody);
$tContext = stream_context_create ();
stream_context_set_option ($tContext, 'ssl', 'local_cert', $tCert);
stream_context_set_option ($tContext, 'ssl', 'passphrase', $tPassphrase);
$tSocket = stream_socket_client ('ssl://'.$tHost.':'.$tPort, $error, $errstr, 30, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $tContext);
if (!$tSocket)
exit ('APNS Connection Failed:' .$error. ' ' .$errstr . PHP_EOL);
$tMsg = chr (0) . chr (0) . chr (32) . pack ('H*', $tToken) . pack ('n', strlen ($tBody)) . $tBody;
// Send the Notification to the Server.
$tResult = fwrite ($tSocket, $tMsg, strlen ($tMsg));
if ($tResult)
echo 'Delivered Message to APNS' . PHP_EOL;
else
echo 'Could not Deliver Message to APNS' . PHP_EOL;
// Close the Connection to the Server.
fclose ($tSocket);
答案 0 :(得分:0)
APNS令牌有两种不同的环境;沙盒和生产。他们需要完全独立的设置,权限,注册和推送设置。将沙盒APNS通知推送到生产令牌将不起作用,与将生产APNS推送到沙盒令牌相同。
如果您在沙盒中进行了验证,但尚未在生产中进行验证,则可能需要复制所有许可和证书才能进行生产。 还要仔细检查您要推送到PHP代码的位置,并确保它是正确的环境(沙盒与产品)。