9

this tutorial kullaniyorum.Iletim bildirimini almayi bildirmek için

<?php 

// Put your device token here (without spaces): 
$deviceToken = '1675ba8bb005740bb514222227f861c30230a81e6eed6bb6b8f353c57831341d'; 

// Put your private key's passphrase here: 
$passphrase = '111134'; 

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

//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.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; 

// Create the payload body 
$body['aps'] = array(
'alert' => $message, 
'sound' => '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)); 
echo 'result =' . $result. PHP_EOL; 
if (!$result) 
echo 'Message not delivered' . PHP_EOL; 
else 
echo 'Message successfully delivered' . PHP_EOL; 

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

Ayrıca push bildirimi için uygulamayı yapılandıracağım. Push için konfigüre ettikten sonra, provizyon profilleri yeniden oluşturuyorum, eski silme, yeni profil yükle. Uygulamayı çalıştırıyorum, aygıt kimliğini veriyor ve daha sonra, bağıl itme profilleriyle push bildirimi göndermek için hem sunucu sanal alanına hem de üretime bağlarım ancak yine de cihazımda push bildirimi alamıyorum.

Ayrıca cihazımda ipusher'i yükleyip push bildirimini kontrol ediyorum. Bu uygulamadan geliyorlar. Ben fark

Bir garip bir şey daha sonra aygıt simgesi

Şimdi benim sorunum Cihazımda push bildirimi almıyorum aynı kalır benim uygulama tanımlayıcı değiştirip başka bir uygulama id kullanmalarıdır.


Sorun profillerimde değil. Kullandığım php kod hatasıdır çünkü uzaktaki sunucuda kolay apları kullandığım zaman push bildirimleri gönderir. Alınan bildirimler 6 ile 7 saat arasındaydı. Bunun cihazımdaki ağ sorunlarından kaynaklandığını düşünüyorum. Ama şimdi 2 gün sonra üretim profilinde çalışıyor. Şimdi bildirim cihazımda yayınlanmak için zaman ayırmıyor, ancak bazı cihazlarda 30 saniyeden 5 dakikaya kadar sürüyor. o zaman bağlantı için DNS kontrol etmelidir, çok diğer uygulamalardan cihazınızda push bildirimleri almak değilse


bir daha problem olabilir.

+2

Bu, sunucu tarafındaki uygulama bölümü, iphone uygulama bölümü hakkındadır. U bu eğiticiyi kontrol edebilir http://mobiforge.com/developing/story/programming-apple-push-notification-services http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part- 12 – iamsult

+0

iphone uygulaması için raywenderlich'i takip ediyorum. Aygıt belirteci almak için –

+0

Sorun profillerimde değil. Kullandığım php kod hatasıdır çünkü uzaktaki sunucuda kolay apları kullandığım zaman push bildirimleri gönderir. Alınan bildirimler 6 ila 7 saatti. Bunun cihazımdaki ağ sorunlarından kaynaklandığını düşünüyorum. Ama şimdi üretim profilinde 2 gün sonra iyi çalışıyor. Şimdi bildirim cihazımda yayınlanmak için zaman ayırmıyor, ancak bazı cihazlarda 30 saniyeden 5 dakikaya kadar sürüyor. –

cevap

2

Sonunda Problemimi tamamladım. Sorun kodda değil aslında sorun iphone'umda ayarlanmış Yanlış DNS Değeri. Iphone, DNS alanım için yönlendiricimin ipini otomatik olarak yerleştirir. Şimdi servis sağlayıcımın DNS değerini veriyorum, o zaman iyi çalışıyor. Şimdi Push mesajları alıyorum En kısa zamanda onları gönderdim.

Umarım başkalarına yardım eder.

1

İtme bildirim sertifikanızı kontrol edin. Sertifika herhangi bir özel anahtarla ilişkilendirildi mi?

Bu durumda, lütfen bildirim zincirinizi anahtar zincirinizden oluşturulan uygun özel anahtarla yeniden oluşturun. sunucu tarafında geribildirim hizmetini uygulayın,

MinuMaster

2

Apple Push Notification Tutorial:

sayesinde ve ayrıca o ne kadar içinde sunucu tarafında kontrol edin:

altında rehberine de bir göz atın Tüm cihaz belirteci süresi APNS'ye gönderilir. Geri bildirim servisinden, ne kadar cihazın uyarı aldığını öğreneceksiniz. Tüm aygıt simgeleri birer birer APN'lere gönderilirse ve APN'ler geri bildirim hizmeti aracılığıyla herhangi bir liste göndermezse, cihazlarda bildirim almak için süreyi kullanamazsınız.

1

UrbanAirShip'i kullanın. Benim düşünceme göre, Android (C2DM) ve Blakberry için Push-alike bildirimlerini de içerdiğinden en iyi sunucu çözümü.

Bu dosyalar arasında farklılıklar bulmaya çalışın ve bunları anlayın. Problemine bir çözüm olabilir.

<?php 

$message = 'Hello'; // $_GET or $_POST 
$badge = 3; // int 
$sound = 'default'; // string - sound name 
$development = true; // boolean 

$payload = array(); 
$payload['aps'] = array('alert' => $message, 'badge' => intval($badge), 'sound' => $sound); 
$payload = json_encode($payload); 

$apns_url = NULL; // Set Later 
$apns_cert = NULL; // Set Later 
$apns_port = 2195; 

if($development) 
{ 
    $apns_url = 'gateway.sandbox.push.apple.com'; 
    $apns_cert = '/path/apns.pem'; // relative address to an App Specific Certificate  file 
} 
else 
{ 
    $apns_url = 'gateway.push.apple.com'; 
    $apns_cert = '/path/cert-prod.pem'; 
} 

$stream_context = stream_context_create(); 
stream_context_set_option($stream_context, 'ssl','local_cert',$apns_cert); 

$apns = stream_socket_client('ssl://'.$apns_url.':'.$apns_port,$error,$error_string,2,STREAM_CLIENT _CONNECT,$stream_context); 

// You will need to put your device tokens into the $device_tokens array yourself 
$device_tokens = array(); // tokens!!! 

foreach($device_tokens as $device_token) 
{ 
    $apns_message = chr(0).chr(0).chr(32).pack('H*',str_replace(' ','',$device_token)).chr(0).chr(strlen($payload)).$payload; 
    fwrite($apns, $apns_message); 
} 

@socket_close($apns); 
@fclose($apns); 
?> 
8

Önce, kullandığınız emin olun: İşte benim kod

uygulama hata ayıklama/release hükmüne derlenmektedir
  • senin anahtarlık dil seçeneği şu an/üretim push bildirimi sertifikası vardır

sonra aşağıdaki kodu kullanın (her iki dev & üretimini de test edilmiştir)

<?php 
// Comment these lines in production mode 
ini_set('display_errors','on'); 
error_reporting(E_ALL); 


// Apns config 

// true - use apns in production mode 
// false - use apns in dev mode 
define("PRODUCTION_MODE",false); 

$serverId = 1; 
$serverName = 'my-server-domain.com'; 

if(PRODUCTION_MODE) { 
$apnsHost = 'gateway.sandbox.push.apple.com'; 
} else { 
$apnsHost = 'gateway.push.apple.com'; 
} 

$apnsPort = 2195; 
if(PRODUCTION_MODE) { 
// Use a development push certificate 
$apnsCert = $_SERVER['DOCUMENT_ROOT'].'/apns/apns-dominos-development.pem'; 
} else { 
// Use a production push certificate 
$apnsCert = $_SERVER['DOCUMENT_ROOT'].'/apns/apns-dominos-production.pem'; 
} 


// --- Sending push notification --- 

// Insert your device token here 
$device_token = "<dc6127d8 dc6127d8 dc6127d8 dc6127d8 dc6127d8 dc6127d8 dc6127d8 dc6127d8>"; // Some Device Token 


// Notification content 

$payload = array(); 

//Basic message 
$payload['aps'] = array(
'alert' => 'testing 1,2,3..', 
'badge' => 1, 
'sound' => 'default', 
); 
$payload['server'] = array(
'serverId' => $serverId, 
'name' => $serverName 
); 
// Add some custom data to notification 
$payload['data'] = array(
'foo' => "bar" 
); 
$payload = json_encode($payload); 

$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 
stream_context_set_option($streamContext, 'ssl', 'passphrase', ""); 


$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error,  $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext); 


$deviceToken = str_replace(" ","",substr($device_token,1,-1)); 
echo $deviceToken; 
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '',  $deviceToken)) . chr(0) . chr(mb_strlen($payload)) . $payload; 
fwrite($apns, $apnsMessage); 


//socket_close($apns); 
fclose($apns); 

?> 
+0

Bu hatta ne yapıyorsunuz? ve neden? $ deviceToken = str_replace ("", "", substr ($ device_token, 1, -1)); – RamshaS

+0

boşlukları ve "<" önekini ve ">" son ekini kaldırarak. Aygıt belirteci alfasayısal, boşluk veya başka karakter içermiyor – Tamir

İlgili konular