“已将消息传递给APNS”,但在ios13(PHP)生产中未显示通知

时间:2019-11-14 12:59:48

标签: php ios swift iphone

我在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);

1 个答案:

答案 0 :(得分:0)

APNS令牌有两种不同的环境;沙盒和生产。他们需要完全独立的设置,权限,注册和推送设置。将沙盒APNS通知推送到生产令牌将不起作用,与将生产APNS推送到沙盒令牌相同。

如果您在沙盒中进行了验证,但尚未在生产中进行验证,则可能需要复制所有许可和证书才能进行生产。 还要仔细检查您要推送到PHP代码的位置,并确保它是正确的环境(沙盒与产品)。