0

我想通过Web服务器发送通知消息。在服务器中,消息已成功发送,但未在设备中显示。但是当我使用EASY APNs Provider中的相同证书密钥发送消息时,消息会在设备中显示。这发生在开发模式。我还没有应用到生产模式。消息发送成功但未在设备中以ios的开发模式出现

enter image description here

enter image description here

但它不是从

我创建了以下这个使用article

命令

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

的.pem文件的Web服务器的工作我的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

任何怨言?

在此先感谢。

+0

我建议使用[OneSignal](https://onesignal.com/)推送任何事件通知。这将使你的生活方式更容易:) –

+0

检查pem文件是否有效转到此链接:http://apns-gcm.bryantan.info/ – Jay

回答

1

您正在使用生产

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 = '[email protected]@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); 
+0

您的解决方案解决了解决方案:D感谢哥们。 –

相关问题