簡體   English   中英

多個發送iOS推送通知不起作用

[英]multiple sending ios push notification doesn't work

我得到了一個用於學校的自定義CMS(PHP / Mysql / html / CSS / JS)。 此CMS中的功能之一是將學校信息發送到移動應用程序。 例如,老師可以為學生添加新聞,而CMS則向其學生發送android和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));
}

任何幫助將不勝感激。

用於發送推送通知的證書有兩種。

  1. 開發推送通知證書-在開發中工作時有效。

  2. 分發推送通知證書-當您從App Store下載應用程序時,生產推送將起作用。 您還可以使用該應用程序的AdHoc版本測試生產推送

測試iOS推送通知的簡單方法

您需要使用passphrase添加設備令牌和證書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM