简体   繁体   English

无法将通知推送到APNS以更新Apple Wallet中的通行证

[英]Can't push notification to APNS to update my pass in Apple Wallet

I'm trying to push notification to APNS to update my pass in Apple Wallet app. 我正在尝试将通知推送到APNS以更新我在Apple Wallet应用中的通行证。 According to this document , we only need to send the pass type identifier and the push token to APNs. 根据该文档 ,我们只需要将传递类型标识符和推送令牌发送到APN。 Then they will take care of the rest. 然后他们将照顾其余的。

$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);

There is no error returned but it seem doesn't work. 没有返回错误,但它似乎不起作用。 What do I do wrong? 我做错了什么? Please help. 请帮忙。

This is the code working on my project 这是我的项目的代码

    $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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM