iPhone SDK Push bildirim rasgele başarısız

5 Cevap php

Ben geliştirme ceritficates mükemmel çalışır aşağıdaki içeriğe sahip bir PHP dosyası var, ama bir üretim sertifikası PHP hataları geçmek ve aşağıda mesajı verir, ancak yalnızca bu zaman yaklaşık% 50 yapar. Çalışır, diğer 50%. Bu oluyor olabilir neden herkes biliyor musun?

<?php
// masked for security reason 
$deviceToken = 'xxxxxx'; // jq

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', dirname(__FILE__)."/prod.pem");

$number = 5;

$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
if (!$fp) {
  print "Failed to connect $err $errstr\n";
}
else {
  print "Connection OK\n";
  $msg = $_GET['msg'];
    $payload['aps'] = array('alert' => $msg, 'badge' => 1, 'sound' => 'default');
    $payload = json_encode($payload);

  $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
  print "sending message :" . $payload . "\n";
  fwrite($fp, $msg);
  fclose($fp);
}
?>

PHP hatası:

Uyarı: stream_socket_client () [function.stream-soket-client]: Yerel sertifika zincir dosya `/ var / www / vhosts / thissite.com / httpdocs / prod.pem 'kurulamıyor; Lütfen cafile / capath ayarları sertifika ayrıntıları ve hat 19 verene / var / www / vhosts / thissite.com / httpdocs / pushMessageLive.php içerdiğini kontrol edin

Uyarı: stream_socket_client () [function.stream-soket-client]: 19 hattı / var / www / vhosts / thissite.com / httpdocs / pushMessageLive.php bir SSL tanıtıcı oluşturmak için başarısız oldu

Uyarı: stream_socket_client () [function.stream-soket-client]: 19 hattı / var / www / vhosts / thissite.com / httpdocs / pushMessageLive.php içinde kripto etkinleştirmek için başarısız oldu

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /var/www/vhosts/thissite.com/httpdocs/pushMessageLive.php on line 19 Failed to connect 0

5 Cevap

Ben aynı sorunu vardı. Apple'ın Push Notification Server ile kalıcı bir soket bağlantısı yapmak zorunda. Benim için çok iyi çalıştı pyapns (http://github.com/samuraisam/pyapns) adında bir python daemon için bir öğretici kadar yazdık:

http://www.how2s.org/index.php/How_to_get_started_with_Apple_Push_Notifications_for_iPhone_or_iPhone_Touch

Bu Debian çalışan ve bu python-bükülmüş, libcurl4-openssl-dev vb gibi gerekli paketleri kurmak için root erişimi varsayarak çalışır

Çok fazla bağlantı gibi geliyor. Apple'ın docs açık bağlantı tutmak ve aynı zamanda gibi birçok göndermek için gereken belirtiyorlar. Re-opening DOS saldırı olarak kabul edilir. Bu yüzden kalıcı hale denemek ve aynı hatayı alırsanız bakın.

Karşılaştığınız hata nedeniyle itme sunuculara kadar çok bağlarla vardır eğer benim durumumda, bu sınırlar ulaşmak biraz zor ... bilmiyorum.

Ben push bildirimleri toplu halde göndermek için denedim Ama diğer taraftan PHP garip hareket edilmiştir. Ben örnek kod emin değilim, ama bir stream_socket_client() yapmak ve fclose() her mesaj için sanırım? PHP SSL soket ile bu tekniği kullanarak, ben şahsen başarılı ettik tek şey başarısızlık ...

Ben size sunucu üzerinde Ruby çalıştırmak için imkanı varsa emin değilim, ama eğer, ben ruby-apns-daemon Apple'ın sunucuları ile konuşmak işlemek için geçiş öneririz. (Eğer hemen aynı yük-JSON oluşturmak, ama yakut-APN-daemon yerine bir soket aracılığıyla göndermek), hafif ve PHP uygulamak kolaydır.

Ben aynı sorunu yaşadım ve sertifika arıza oldu. Burada çözümlerini görebilirsiniz http://stackoverflow.com/questions/2997829/how-can-i-do-an-ssl-connection-with-php/3003978#3003978 ve burada http://stackoverflow.com/questions/809682/error-using-ssl-cert-with-php.

Size yardımcı olacak umuyoruz.

Ve kayıt için size APNS ile kalıcı bir bağlantı yapmak zorunda değildir. Bu seferde tüm mesajları göndermek en iyisi olsa da, birden çok kez bağlanmak ve kesebilirsiniz. Ben Apple'ın sitesini alıntı:

You should also retain connections with APNs across multiple notifications. APNs may consider connections that are rapidly and repeatedly established and torn down as a denial-of-service attack. Upon error, APNs closes the connection on which the error occurred.

Eğer bir seferde bağlantı yüz yaratmak yoksa sorun değil almak gerekir.

Böyle bir şey için Kentsel Airship kullanmayı düşünmelisiniz. Biz güzel ve dinlendirici bir API http://urbanairship.com/docs/push_index.html ve çok sayıda özellikleri eklenti ve indie planı ücretsizdir.

(Ben orada çalışmak)