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感謝哥們。 –

相關問題