编程语言
首页 > 编程语言> > php-无法将通知推送到APNS以更新我在Apple Wallet中的密码

php-无法将通知推送到APNS以更新我在Apple Wallet中的密码

作者:互联网

我正在尝试向APNS推送通知以更新我在Apple Wallet应用中的通行证.根据this document,我们只需要将通过类型标识符和推送令牌发送到APN.然后,他们将照顾其余的人.

$apnsHost = 'gateway.push.apple.com';
    $apnsPort = 2195;
    $apnsCert = base_path('app/config/passbook/certificates.pem');
    $payload = ['aps' => []];
    $payload = json_encode($payload);

    $streamContext = stream_context_create();
    stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
    stream_context_set_option($streamContext, 'ssl', 'passphrase', 'xxxxxx');

    $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);

    if(!$apns) {
        Logger::logError(1, "Passbook push notification error", ['serial_number' => $serialNumber, 'pass_type_id' => $passIdentify]);
        return "Failed to connect (stream_socket_client): $error $errorString";
    } else {
        foreach($push_tokens as $idx => $push_token) {
            $msg = chr(0) . pack('n', 32) . pack('H*', $push_token) . pack('n', strlen($payload)) . $payload;

            fwrite($apns, $msg);
        }
    }
    @socket_close($apns);
    fclose($apns);

没有返回错误,但似乎不起作用.我做错了什么?请帮忙.

解决方法:

这是在我的项目上工作的代码

    $errors = [];
    $apnsHost = 'gateway.push.apple.com';
    $apnsPort = 2195;
    $apnsCert = base_path('app/config/passbook/certificates.pem');
    $payload = ['aps' => []];
    $payload = json_encode($payload);

    $streamContext = stream_context_create();
    stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
    stream_context_set_option($streamContext, 'ssl', 'passphrase', 'xxxxxxxxx');

    $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
    stream_set_blocking ($apns, 0);

    if( ! $apns) {
        return "Failed to connect (stream_socket_client): $error $errorString";
    } else {
        foreach($push_tokens as $idx => $push_token) {
            $msg = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $push_token)) . chr(0) . chr(mb_strlen($payload)) . $payload;

            $success = fwrite($apns, $msg);
            if ($success === strlen($msg)) { // log success
                Logger::logPassbook('Push success', ['push_token' => $push_token]);
            } else {
                Logger::logPassbook('Push failed', ['push_token' => $push_token]);
            }
        }
    }

    @socket_close($apns);
    fclose($apns);

    return $errors;

标签:passbook,php,ios,wallet
来源: https://codeday.me/bug/20191012/1902748.html