APNs Görüşleri Server sorgulayabilirsiniz PHP tekniği

4 Cevap php

Birisi APN (Apple Push Notification) kadar bunu sorgulamak ne kadar istediğini açıklamak miyim?

Dokümanlar kısa sürede bağlantı yapılır göndermeye başlar söylüyorlar. Bu Bunun üzerine bir fread() yapmıyoruz anlamına mı geliyor?

İşte bunu denemek ve okumak benim geçerli kod. Ben "okumak için daha fazla kayıt" ve benim sunucu üzerinde sonsuz bir döngü istemediğini gösterir ne yanıt bilmiyorum ben bir döngü fread() koymadı.

<?php
$apnsCert = 'HOHRO-prod.pem';

$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'verify_peer', false);

$apns = stream_socket_client('ssl://feedback.push.apple.com:2196', $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext);

echo 'error=' . $error;
echo 'errorString=' . $errorString;


$result = fread($apns, 38);
echo 'result=' . $result;


fclose($apns);
?>

Şimdiye kadar ben alıyorum her bir boş cevap. O bağlanıyor böylece herhangi bir hata bulunmamaktadır.

Ben boş cevap herhangi bir veri yoktur, ya da benim fread() bunu yapmak için yanlış bir yoldur demek bilmiyorum.

Teşekkürler

4 Cevap

APNS geribildirim sunucuları sadece "doldu" var cihaz simgeleri döndürmek since your last feedback request: İşte ilk bağlanırken çalıştım beni karıştı büyük bir Yakaladım bulunuyor. Hangi zaten app kullanıcıların yüksek hacimli uğraşıyoruz sürece NULL cevap alırsınız çoğu zaman anlamına gelir.

Görüşleriniz sorgudan sonra onlar için iyi gitti çünkü Yani, disk veya db için süresi dolan cihaz simgeleri saklamak emin olun. Bu az söylemek bir ağrı test yapar!

İşte APNS geribildirim sunucularına (hep birlikte koymak bana yardım için yukarıdaki cevaplar çok teşekkürler) den aygıt belirteçleri almak için komple bir fonksiyon bulunuyor:

function send_feedback_request() {
    //connect to the APNS feedback servers
    //make sure you're using the right dev/production server & cert combo!
    $stream_context = stream_context_create();
    stream_context_set_option($stream_context, 'ssl', 'local_cert', '/path/to/my/cert.pem');
    $apns = stream_socket_client('ssl://feedback.push.apple.com:2196', $errcode, $errstr, 60, STREAM_CLIENT_CONNECT, $stream_context);
    if(!$apns) {
        echo "ERROR $errcode: $errstr\n";
        return;
    }


    $feedback_tokens = array();
    //and read the data on the connection:
    while(!feof($apns)) {
        $data = fread($apns, 38);
        if(strlen($data)) {
            $feedback_tokens[] = unpack("N1timestamp/n1length/H*devtoken", $data);
        }
    }
    fclose($apns);
    return $feedback_tokens;
}

Her şey iyi ise, bu fonksiyonun geri dönüş değerleri ((print_r üzerinden)) bu gibi bir şey olacaktır:

Array
(
    Array
    (
        [timestamp] => 1266604759
        [length] => 32
        [devtoken] => abc1234..............etcetc
    ),
    Array
    (
        [timestamp] => 1266604922
        [length] => 32
        [devtoken] => def56789..............etcetc
    ),
)

Eğer döngü gerekiyor ve tüm aygıt kodlarını okumak için akışın sonunda kontrol ancak bu kodu doğru görünüyor.

 while (!feof($apns)) {
        $devcon = fread($apns, 38);
 }

Ancak benim problem verilerin gerçek açma olduğunu. Herkes sadece damgası vs ile birlikte (dize olarak) gerçek aygıt kimliği almak için okudum ikili veri paketten nasıl biliyor mu?

Ben elma forum çözüm var ve gelişimi içindir. De üretim için bu deneyin.

"Eh, bu göründüğü kadar aptal, ben bir çözüm buldum:

Create a dummy app id in the program portal, enable development push notifications on it Create and download the associated provisioning profile Create a new xcode project, and invoke the registerForRemoteNotificationTypes method on start. Install the dummy app on your device. At this point, you should have two DEVELOPMENT apps running on your device: the original app and the dummy app. Both should be registered to receive push notifications. Uninstall the original app, and try to send a push notification to that app. Invoke the feedback service, and you should receive data back."

Bu nihayet benim için çalıştı.

$arr = unpack("H*", $devconts); 
$rawhex = trim(implode("", $arr));

$feedbackTime = hexdec(substr($rawhex, 0, 8)); 
$feedbackDate = date('Y-m-d H:i', $feedbackTime); 
$feedbackLen = hexdec(substr($rawhex, 8, 4)); 
$feedbackDeviceToken = substr($rawhex, 12, 64);

Ve o zaman sadece zaman damgası karşı cihaz belirteci için kontrol edin!