多个发送ios推送通知不起作用

时间:2017-08-16 09:22:00

标签: php ios push-notification

我为学校定制了一个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 个答案:

答案 0 :(得分:0)

有两种类型的证书可用于发送推送通知。

  1. 开发推送通知证书 - 当您在开发中工作时,此功能可用。

  2. 分发推送通知证书 - 从App Store下载应用程序时,生产推送将起作用。您还可以使用应用的AdHoc版本

  3. 测试生产推送

    Simple way to test iOS push notifications

    您需要使用密码短语添加设备令牌和证书。