2016-02-29 58 views
0

我有以下问题。IOS推送通知没有收到或发送了一些用户

我有一个IOS应用程序,两年后运行,并没有与推送通知问题。

我基本上做的是我存储所有注册ID在数据库和PHP脚本向他们发送通知:

// 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); 

$title = "My App"; 

$nachricht = $message['teams']['heim']." - ". $message['teams']['aus']; 
// Create the payload body 
$body['aps'] = array(
    'alert' => $title. " \n " . $nachricht, 
    'sound' => 'default', 
    'message' => $nachricht 
    ); 
$body['id'] = $message['spiel']; 
$body['message'] = $nachricht; 
$body['title'] = $title; 

// Encode the payload as JSON 
$payload = json_encode($body); 

for ($i = 0; $i < count($registation_ids); $i++) { 
    // Build the binary notification 
    $msg = chr(0) . pack('n', 32) . pack('H*', $registation_ids[$i]) . pack('n', strlen($payload)) . $payload; 

    // Send it to the server 
    $result = fwrite($fp, $msg, strlen($msg)); 

} 
fclose($fp); 

我从来没有与该脚本任何问题,但现在谁收到了一些用户几周前的通知不再接收它们。首先,我认为我的证书出现了问题,并提供了配置文件,但具有相同IOS版本和App版本的其他用户仍然收到通知。 我也检查了不再接收消息的用户的通知设置,它们是正确的。

什么会导致此问题? 目前我不知道发生错误的位置。

+0

检查设备令牌,如果注册.. – 0yeoj

+0

我不认为他们没有注册,因为有些账户确实收到推送通知,前一段时间,而不是现在接受。他们可以设置一些设置,因为他们使用设备令牌作为密钥,它也在工作 – fsulser

回答

1
function send_notification_ios($registatoin_ids,$message) { 

     $ctx = stream_context_create(); 
     stream_context_set_option($ctx, 'ssl', 'passphrase', ''); 
     //for sandbox url 

     stream_context_set_option($ctx, 'ssl', 'local_cert', 'pemios/dev_apns_vookar.pem'); 
     $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

     //for live url 

     // stream_context_set_option($ctx, 'ssl', 'local_cert', 'pemios/apns-production.pem'); 
     //$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

     stream_set_blocking ($fp, 1); 
     if (!$fp) { 
      echo "Failed to connect (stream_socket_client): $err $errstr"; 
     } 
     else { 
      $apple_expiry = time() + (90 * 24 * 60 * 60); 
      foreach($registatoin_ids as $key=>$value){ 
       $apple_identifier = $key; 
       $deviceToken = $value; 
       $payload = json_encode($message); 
       $msg = pack("C", 1) . pack("N", $apple_identifier) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n", strlen($payload)) . $payload; 
       fwrite($fp, $msg); 
       //checkAppleErrorResponse($fp); 
      } 
     } 
     usleep(500000); 
     //checkAppleErrorResponse($fp); 
     //mysql_close($con); 
     fclose($fp); 
     return true; 
    } 



$iphonedeviceId = array($requestDataIos[0]['device_id']); 
        $body = array(); 

         $body['aps']['alert'] = $message; 
        $body['aps']['userId'] = $params['user_id']; 
        $body['aps']['request_id'] = $params['request_id']; 
        $body['aps']['vendor_id'] = $params['vendor_id']; 
        // $body['aps']['request_vendor_arrived'] = 1; 
        $body['aps']['sender'] = $userDetails[0]['full_name']; 


        $body['aps']['badge'] = +1; 
        $body['aps']['userId'] = $userId; 
        $body['aps']['sound'] = "default"; 
        $body['aps']['content-available'] = "1"; 
        $body['aps']['nt'] = "3"; 
        $this->send_notification_ios($iphonedeviceId, $body); 
+0

并检查您的PEM文件 –

+0

由于有些用户正在接收通知,我不认为PEM文件中有任何错误? – fsulser

+0

是的,但有些用户正在收到通知。那么问题在Iphone ID –