iOS推送不会使用多个设备ID

时间:2016-09-12 22:54:29

标签: php ios apple-push-notifications

我使用PHP获取一个device_ids数组, 并使用此代码将iOS推送到每个人 -
问题 - 当device_ids(deviceTokens)数组为2-3 device_ids时,所接收的设备会被推送。但是当deviceTokens数组长约300 device_id时,deviecs没有收到推送通知。 可能是什么问题?我是PHP的新手

(这个问题已被问过几次,但答案没有反映出我面临的问题)

$customers_ios = "SELECT * FROM `gcm_user` WHERE `gcmregios` <> '0' and `preference` = '1'";
                $c_ios = mysql_query($customers_ios);

                while($bd = mysql_fetch_array($c_ios)) {
                    $deviceTokens[]= $bd['gcmregios'];

                }

                $arrlength = count($deviceTokens);
                //echo $arrlength;

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

                //adhoc_id already setup above
                $message = $adhoc_desc;
                $title =  $adhoc_title;



                $ctx = stream_context_create();
                stream_context_set_option($ctx, 'ssl', 'local_cert', 'PushDistCertificates.pem');
                stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

                //'ssl://gateway.sandbox.push.apple.com:2195'
                // 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)
                    continue;

                // Create the payload body
                $body['aps'] = 
                array(
                    'alert'=> $title,
                    'message' => 
                    array('ADHOC' => 
                        array('ADHOC_ID' => $adhoc_id,
                            'ADHOC_TITLE' => $title,
                            'ADHOC_DESCRIPTION' =>  $message,
                        )
                    ),
                    'sound'=>'default'
                );

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

                foreach($deviceTokens as $ios_token){
                    $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $ios_token)) . pack("n",strlen($payload)) . $payload;
                    $result = fwrite($fp, $msg); 
                }
                // Close the connection to the server
                fclose($fp);

1 个答案:

答案 0 :(得分:0)

我们遇到的类似问题,交叉检查数据库中的所有设备ID,我们发现设备ID为&#34;模拟器&#34;这是xcode中虚拟设备的设备ID。在开发期间,DEV团队可能已经在模拟器中进行了测试,并且APNS越早识别出此ID,它拒绝所有请求。可能只是针对我们的具体问题,交叉检查会有所帮助。