title: APNS Failed to connect: 0
body: <p>I followed Ray Wenderlich's tutorial for remote notifications on iOS, and had no issues with development. In production, however, my notifications are failing with the error: <code>Failed to connect: 0</code></p>
  
  <p>I've searched around, but nobody seems to have a definitive script, and many of the answers on SO are contradictory. Here is the code I am currently using:</p>
  
  <pre><code>&lt;?php
  
  // Put your device token here (without spaces):
  $deviceToken = [my device token];
  
  // Put your private key's passphrase here:
  // ITS REALLY THE PEM PASS
  $passphrase = [the password];
  
  // Put your alert message here:
  $message = 'Hello, User!';
  
  ////////////////////////////////////////////////////////////////////////////////
  
  $ctx = stream_context_create();
  $cert = __DIR__ . '/Notifications_iOS/ck.pem';
  stream_context_set_option($ctx, 'ssl', 'local_cert', $cert);
  stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
  
  // Open a connection to the APNS server
  /*
  // Dev
  $fp = stream_socket_client(
      'ssl://gateway.sandbox.push.apple.com:2195', $err,
      $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
  */
  // Production
  $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;
  
  // Create the payload body
  $body['aps'] = array(
      'alert' =&gt; $message,
      'sound' =&gt; 'default'
      );
  
  // 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);
  
  ?&gt;
  </code></pre>