2017-08-16 22 views
0

私は学校用のカスタマイズされたCMSを取得します(PHP/Mysql/html/CSS/JS)。このCMSの機能の1つは、学校の情報をモバイルアプリケーションに送信することです。たとえば、教師が生徒のためのニュースを追加でき、CMSがアンドロイドとiOSプッシュ通知を学生に送信します。複数送信iosプッシュ通知が機能しません

問題は、システムが複数のiOS通知を送信し、通知が受信されない場合です。 (iOSの通知は問題なく動作します)。

関数のソースコード:

function send_notification_ios($mesaj, $uye, $link = NULL,$cert = 'combined',$passphrase="passphrase123") { 
    $success = 0; 
    $failure = 0; 
    $error; 
    $errorString; 
    $keyPath = dirname(__FILE__) . '/' .$cert.'.pem'; 

    $keyPassword = $passphrase; 
    $context = stream_context_create(); 
    if (!stream_context_set_option($context, 'ssl', 'local_cert', $keyPath)){ 
     return json_encode(array('success' => 0, 'failure' => 1, 'reason'=>'stream_context local_cert')); 
    } 
    if(!stream_context_set_option($context, 'ssl', 'passphrase', $keyPassword)){ 
     return json_encode(array('success' => 0, 'failure' => 1, 'reason'=>'stream_context passphrase')); 
    } 

    $socket = stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $context); 
    if (!$socket) { 
     return json_encode(array('success' => 0, 'failure' => 1, 'reason'=>'soket: '.$error.' '.$errorString.' '.$keyPath.' '.$keyPassword)); 
    } 
    $body['aps'] = array(
      'alert' => array( 
       'action-loc-key' => "Open", 
       'body'    => $mesaj 
      ), 
      'sound' => 'default', 
      'badge' => 0 
     ); 
    foreach ($uye as $item) { 
     $body['aps']['badge'] = (isset($item['badge'])) ? $item['badge'] : 0; 
     $body['url'] = (isset($item['url'])) ? $item['url'] : ''; 
     $encodedData = json_encode($body); 
     $binaryString = chr(0).pack('n', 32).pack('H*', $item['apikey']).pack('n', strlen($encodedData)).$encodedData; 
     $result = fwrite($socket, $binaryString, strlen($binaryString)); 
     if (!$result) { 
      $failure++; 
     } else { 
      $success++; 
     } 
    } 
    fclose($socket); 
    return json_encode(array('success' => $success, 'failure' => $failure, 'reason'=>'fwrite', 'certname'=>$cert)); 
} 

任意の助けが理解されるであろう。

+0

プッシュ通知を複数のデバイスに送信するには、プッシュ通知を受信する必要のあるすべてのデバイストークンを渡す必要があります。 –

答えて

0

プッシュ通知を送信する証明書には、2種類あります。

  1. 開発プッシュ通知証明書 - これは開発時に動作します。

  2. 配布プッシュ通知証明書 - プロダクションプッシュは、App Storeからアプリをダウンロードするときに機能します。また、あなたはパスフレーズでデバイストークンと証明書を追加する必要があるアプリ

Simple way to test iOS push notifications

のアドホックビルドで生産プッシュをテストすることができます。

+0

私が書いたように、シングルプッシュ通知は動作します。それは証明書の問題ではありません。 –

+0

あなたの証明書は配布プッシュ通知証明書(.pemファイル) 'ssl://gateway.push.apple.com:2195'がURLでなければなりません –

+0

あなたは私のコードを見ていないでしょう? –

関連する問題