2014-06-07 168 views
3

我有一個問題,當我使用推送通知,它適用於我使用開發,但是當我想使用它的真實,它不會工作。蘋果推送通知 - PHP

該ck是爲生產而製造的。

當我使用它,結果是:Message successfully delivered但是我的手機沒有收到消息

<?php 

pushNotification('wow2','DeviceToken'); 

function pushNotification($theMessage, $theDeviceToken) 
{ 

     // Put your device token here (without spaces): 
    $deviceToken = $theDeviceToken;  

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

    // Put your alert message here: 
    $message = $theMessage; 

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

    $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.push.apple.com:2195', $err, 
     $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

    if (!$fp) 
     //exit("Failed to connect: $err $errstr" . PHP_EOL); 
    exit("" . PHP_EOL); 
    //echo 'Connected to APNS\n' . 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)); 

    if (!$result) 
     echo 'Message not delivered' . PHP_EOL; 
    else 
     echo 'Message successfully delivered' . PHP_EOL; 

    fclose($fp); 


} 
?>  

任何人都可以看看有什麼不對嗎? :)

回答

1

有3種,在面臨問題在這裏對APNS

  1. 您的設備令牌不匹配
  2. 您的.pem不是有效的,原因是.p12和.cer文件有時會損壞,因此請刪除.p12文件和.cer並再次創建一次。
  3. 是不是一個值得能夠答案,但一個偶然的機會將是發生 - 檢查你的設備的通知是ON/OFF
+0

你需要一些參考使用這個http://stackoverflow.com/questions/22717275/apns-push-notifications-not-working-on-production,http://stackoverflow.com/問題/ 17896979/APNS推送的通知 - 是 - 不工作,與生產證書 –

0

我認爲這是您的設備令牌的問題。如果您的服務器中有無效的設備令牌,它將不會收到通知。一旦你從你的服務器中刪除了無效的設備令牌,它就會起作用。

同樣的事情發生在我身上,花了很長時間才找到解決方案。

+0

我只是試着用我的一些朋友,但仍然無法工作:/ – Stof

+0

@Stof ok與蘋果開發者控制檯登錄,並檢查與你的蘋果軟件包標識爲您的應用程序,推送通知啓用或不 – Shanthanu

0

嘗試使用設備移動令牌的硬編碼設備令牌。

之後,使用變量或回聲設備令牌之前嘗試。

//把你的設備令牌這裏(無空格):

$deviceToken = '0f744707bebcf74f9b7c25d48e3358945f6aa01da5dd43487462c7eaf61bbad78'; 
+0

這就是我在做:) – Stof

+0

然後檢查您的ck.pem生成過程,並正確地上傳 –

+0

我已經完成了這與開發,我已經做了幾次,檢查它是否正確完成 – Stof