ios 消息发送成功但未出现在开发模式的设备中

Message sent successfully but doesn't appear in device in the development mode in ios

我想通过网络服务器发送通知消息。在服务器中,消息已成功发送,但未出现在设备中。但是当我使用来自 EASY APNs Provider 的相同证书密钥发送消息时,消息确实显示在设备中。这发生在开发模式中。我还没有申请生产模式

但它无法从网络服务器运行

我已经按照这个 article

创建了 .pem 文件

使用命令

openssl pkcs12 -in pushcert.p12 -out pushcert.pem -nodes -clcerts

我的php代码

    if((include 'config.inc.php') == TRUE) {
        WriteDebug('Functions.php include: OK');
    }
    try {
        $ctx = stream_context_create();
        stream_context_set_option($ctx, 'ssl', 'local_cert', $IOS_pem);
        stream_context_set_option($ctx, 'ssl', 'passphrase', $config_passphrase);
        $time_start =  microtime(true); 
        // Open a connection to the APNS server
        $fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
        if (!$fp)
            exit("Failed to connect: $err $errstr" . PHP_EOL);
        echo 'Connected to APNS' . PHP_EOL;

        $text = "";
        foreach($body['aps'] as $key => $value){              
            //WriteDebugLog("Body Key = " . $key . " & Value= " . $value, DEBUG);
            $text .="[' " . $key . "',".$value."]";
        }            
        WriteDebug("$text to $deviceToken");
        // 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($pushArray)) . $pushArray;
        WriteDebug('REQ '.$msg);
        // Send it to the server
        $result = fwrite($fp, $msg, strlen($msg));
        //Get response from apple
        stream_set_timeout($fp, 5);
        $resFromApple = fread($fp, 2000);
        //Getting the timeout status
        $info = stream_get_meta_data($fp);
        fclose($fp);
        //Track time taken
        $time_end = microtime(true);
        if ($info['timed_out']) {
            echo 'Connection timed out!';
            WriteDebug('RSP Timed out!');
        } else {
            echo $resFromApple;
            WriteDebug('RSP '.$resFromApple);
        }
        if (!$result) {
            WriteDebug('Message failed delivered, Push Unsuccessfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000);
            echo 'Message failed delivered, Push Unsuccessfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000;
        } else {
            WriteDebug('Message successfully delivered, Push successfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000);
            echo'Message successfully delivered, Push successfully,TT: '.number_format(($time_end-$time_start), 2, '.', '')*1000;
        }
        // Close the connection to the server
        fclose($fp);
    }   catch (Exception $exp) {
        //WriteDebug("Error connection");
        fwrite($lfh, $exp);
        WriteErr($exp);
        return 9;
    }

config.inc.php

$IOS_pem='/apraise/transformers/fc2apple/phpscripts/pushcert2july.pem';
$SSL_URL='ssl://gateway.sandbox.push.apple.com:2195';

$config_passphrase = 'apraise123';

日志文件

2017-07-03 17:28:50.011 DBG receivers: 120f49ce167956785b5d1d6552510feb7d8587610b2b1496d2a1fae951b34969sharePush: {"aps" : {"alert" : {"title" : "Add Contact","body" : "Setting test apn"},"sound" : "default","badge" : 1}}
2017-07-03 17:28:50.011 DBG Functions.php include: OK
2017-07-03 17:28:50.647 DBG  to 120f49ce167956785b5d1d6552510feb7d8587610b2b1496d2a1fae951b34969
2017-07-03 17:28:50.647 DBG REQ {"aps" : {"alert" : {"title" : "Add Contact","body" : "Setting test apn"},"sound" : "default","badge" : 1}}
2017-07-03 17:28:50.648 DBG $result: 144
2017-07-03 17:28:50.648 DBG RSP  
2017-07-03 17:28:50.648 DBG Message successfully delivered, Push successfully,TT: 640

我已按照此 article 创建其他文件。

有什么建议吗?

提前致谢。

您正在使用 Production

的网关
ssl://gateway.push.apple.com:2195

您必须使用开发的网关。

ssl://gateway.sandbox.push.apple.com:2195

同时检查我的 PHP 文件。

<?php


    $deviceToken = '163e00bf5a7fe5298782988a4dcdecddac0dfe2fecf3723b4354076adasdasdfasdf'; // Development 

    // Put your private key's passphrase here:
    $passphrase = 'M@@123';

    // Put your alert message here:
    $message = 'My first push notification!';


    $sound = 'Default';


    $badge=12;
    ////////////////////////////////////////////////////////////////////////////////

    echo 'Connection Start';

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

    // Open a connection to the APNS server
    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

    if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

    echo 'Connected to APNS' . PHP_EOL;

    $body['aps'] = array('alert' => 'This is the alert text', 'badge' => $badge, 'sound' => 'default');


    $body['PushKey'] = array('Type' => 1, 'ID' => 392);



    echo json_encode($body);


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

    if (!$result)
    echo 'Message not delivered' . PHP_EOL;
    else
    echo 'Message successfully delivered' . PHP_EOL;

    // Close the connection to the server
    fclose($fp);